compile.c: register cdhash
* compile.c (iseq_build_from_ary_body): register cdhash to the iseq constant body instead of compile time mark array, not to get GCed. [ruby-core:70708] [Feature #8543] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
868265cac3
commit
3d5fd5f30d
@ -1,3 +1,9 @@
|
||||
Thu Sep 10 12:17:28 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* compile.c (iseq_build_from_ary_body): register cdhash to the
|
||||
iseq constant body instead of compile time mark array, not to
|
||||
get GCed. [ruby-core:70708] [Feature #8543]
|
||||
|
||||
Wed Sep 9 18:16:14 2015 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* lib/rubygems/stub_specification.rb (Gem::StubSpecification#data):
|
||||
|
@ -6048,7 +6048,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
|
||||
}
|
||||
RB_GC_GUARD(op);
|
||||
argv[j] = map;
|
||||
iseq_add_mark_object_compile_time(iseq, map);
|
||||
rb_iseq_add_mark_object(iseq, map);
|
||||
}
|
||||
break;
|
||||
case TS_FUNCPTR:
|
||||
|
@ -51,6 +51,26 @@ class TestISeq < Test::Unit::TestCase
|
||||
assert_raise_with_message(TypeError, /:foobar/) {RubyVM::InstructionSequence.load(ary)}
|
||||
end if defined?(RubyVM::InstructionSequence.load)
|
||||
|
||||
def test_loaded_cdhash_mark
|
||||
iseq = RubyVM::InstructionSequence.compile(<<-'end;', __FILE__, __FILE__, __LINE__+1)
|
||||
def bug(kw)
|
||||
case kw
|
||||
when "false" then false
|
||||
when "true" then true
|
||||
when "nil" then nil
|
||||
else raise("unhandled argument: #{kw.inspect}")
|
||||
end
|
||||
end
|
||||
end;
|
||||
assert_separately([], <<-"end;")
|
||||
iseq = #{iseq.to_a.inspect}
|
||||
RubyVM::InstructionSequence.load(iseq).eval
|
||||
assert_equal(false, bug("false"))
|
||||
GC.start
|
||||
assert_equal(false, bug("false"))
|
||||
end;
|
||||
end if defined?(RubyVM::InstructionSequence.load)
|
||||
|
||||
def test_disasm_encoding
|
||||
src = "\u{3042} = 1; \u{3042}; \u{3043}"
|
||||
asm = RubyVM::InstructionSequence.compile(src).disasm
|
||||
|
Loading…
x
Reference in New Issue
Block a user