mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	compile.c: fix positions encode
* compile.c (ibf_load_iseq_each): iseq_size necessary to encode positions is set in ibf_load_code(). [Bug #14660] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63103 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									d1c9c0add4
								
							
						
					
					
						commit
						7084c015bf
					
				
					 3 changed files with 27 additions and 30 deletions
				
			
		
							
								
								
									
										22
									
								
								KNOWNBUGS.rb
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								KNOWNBUGS.rb
									
										
									
									
									
								
							|  | @ -5,25 +5,3 @@ | |||
| # This test file includes tests which point out known bugs. | ||||
| # So all tests will cause failure. | ||||
| # | ||||
| assert_normal_exit("#{<<~"begin;"}\n#{<<~'end;#1'}", timeout: 5) | ||||
| begin; | ||||
|   str = "#{<<~"begin;"}\n#{<<~'end;'}" | ||||
|   begin; | ||||
|     class P | ||||
|       def p; end | ||||
|       def q; end | ||||
|       E = "" | ||||
|       N = "#{E}" | ||||
|       attr_reader :i | ||||
|       undef p | ||||
|       undef q | ||||
|       remove_const :E | ||||
|       remove_const :N | ||||
|     end | ||||
|   end; | ||||
|   iseq = RubyVM::InstructionSequence.compile(str) | ||||
|   100.times {|i| | ||||
|     bin = iseq.to_binary | ||||
|     RubyVM::InstructionSequence.load_from_binary(bin).eval | ||||
|   } | ||||
| end;#1 | ||||
|  |  | |||
|  | @ -8870,15 +8870,15 @@ ibf_load_iseq_each(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t of | |||
|     load_body->param.keyword        = ibf_load_param_keyword(load, body); | ||||
|     load_body->insns_info.body      = ibf_load_insns_info_body(load, body); | ||||
|     load_body->insns_info.positions = ibf_load_insns_info_positions(load, body); | ||||
| #if VM_INSN_INFO_TABLE_IMPL == 2 | ||||
|     rb_iseq_insns_info_encode_positions(iseq); | ||||
| #endif | ||||
|     load_body->local_table          = ibf_load_local_table(load, body); | ||||
|     load_body->catch_table          = ibf_load_catch_table(load, body); | ||||
|     load_body->parent_iseq          = ibf_load_iseq(load, body->parent_iseq); | ||||
|     load_body->local_iseq           = ibf_load_iseq(load, body->local_iseq); | ||||
| 
 | ||||
|     ibf_load_code(load, iseq, body); | ||||
| #if VM_INSN_INFO_TABLE_IMPL == 2 | ||||
|     rb_iseq_insns_info_encode_positions(iseq); | ||||
| #endif | ||||
| 
 | ||||
|     rb_iseq_translate_threaded_code(iseq); | ||||
| } | ||||
|  |  | |||
|  | @ -396,18 +396,37 @@ class TestISeq < Test::Unit::TestCase | |||
|     } | ||||
|   end | ||||
| 
 | ||||
|   def test_to_binary_with_objects | ||||
|   def assert_iseq_to_binary(code, mesg = nil) | ||||
|     skip "does not work on other than x86" unless /x(?:86|64)|i\d86/ =~ RUBY_PLATFORM | ||||
|     code = "[]"+100.times.map{|i|"<</#{i}/"}.join | ||||
|     iseq = RubyVM::InstructionSequence.compile(code) | ||||
|     bin = assert_nothing_raised do | ||||
|     bin = assert_nothing_raised(mesg) do | ||||
|       iseq.to_binary | ||||
|     rescue RuntimeError => e | ||||
|       skip e.message if /compile with coverage/ =~ e.message | ||||
|       raise | ||||
|     end | ||||
|     skip "trace events does not load correctly since r62851" | ||||
|     10.times do | ||||
|       assert_equal(bin, iseq.to_binary, mesg) | ||||
|     end | ||||
|     iseq2 = RubyVM::InstructionSequence.load_from_binary(bin) | ||||
|     assert_equal(iseq.to_a, iseq2.to_a) | ||||
|     assert_equal(iseq.to_a, iseq2.to_a, mesg) | ||||
|     iseq2 | ||||
|   end | ||||
| 
 | ||||
|   def test_to_binary_with_objects | ||||
|     assert_iseq_to_binary("[]"+100.times.map{|i|"<</#{i}/"}.join) | ||||
|   end | ||||
| 
 | ||||
|   def test_to_binary_line_info | ||||
|     assert_iseq_to_binary("#{<<~"begin;"}\n#{<<~'end;'}", '[Bug #14660]').eval | ||||
|     begin; | ||||
|       class P | ||||
|         def p; end | ||||
|         def q; end | ||||
|         E = "" | ||||
|         N = "#{E}" | ||||
|         attr_reader :i | ||||
|       end | ||||
|     end; | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nobu
						nobu