mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	merge revision(s) 5e018214e7: [Backport #15720]
				
					
				
			Fix SystemStackError when calling a method in an unused refinement Fixes [Bug #15720] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@67729 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									52eb4e661e
								
							
						
					
					
						commit
						6bb473ea37
					
				
					 3 changed files with 37 additions and 2 deletions
				
			
		|  | @ -2204,6 +2204,38 @@ class TestRefinement < Test::Unit::TestCase | |||
|     INPUT | ||||
|   end | ||||
| 
 | ||||
|   def test_call_method_in_unused_refinement | ||||
|     bug15720 = '[ruby-core:91916] [Bug #15720]' | ||||
|     assert_in_out_err([], <<-INPUT, ["ok"], [], bug15720) | ||||
|       module M1 | ||||
|         refine Kernel do | ||||
|           def foo | ||||
|             'foo called!' | ||||
|           end | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       module M2 | ||||
|         refine Kernel do | ||||
|           def bar | ||||
|             'bar called!' | ||||
|           end | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       using M1 | ||||
| 
 | ||||
|       foo | ||||
| 
 | ||||
|       begin | ||||
|         bar | ||||
|       rescue NameError | ||||
|       end | ||||
| 
 | ||||
|       puts "ok" | ||||
|     INPUT | ||||
|   end | ||||
| 
 | ||||
|   def test_super_from_refined_module | ||||
|     a = EnvUtil.labeled_module("A") do | ||||
|       def foo;"[A#{super}]";end | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| #define RUBY_VERSION "2.6.3" | ||||
| #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR | ||||
| #define RUBY_PATCHLEVEL 79 | ||||
| #define RUBY_PATCHLEVEL 80 | ||||
| 
 | ||||
| #define RUBY_RELEASE_YEAR 2019 | ||||
| #define RUBY_RELEASE_MONTH 8 | ||||
|  |  | |||
|  | @ -2315,7 +2315,10 @@ vm_call_method_each_type(rb_execution_context_t *ec, rb_control_frame_t *cfp, st | |||
| 		    goto no_refinement_dispatch; | ||||
| 		} | ||||
| 	    } | ||||
| 	    cc->me = ref_me; | ||||
|             if (cc->me->def->type != VM_METHOD_TYPE_REFINED || | ||||
|                  cc->me->def != ref_me->def) { | ||||
|                  cc->me = ref_me; | ||||
|             } | ||||
| 	    if (ref_me->def->type != VM_METHOD_TYPE_REFINED) { | ||||
| 		return vm_call_method(ec, cfp, calling, ci, cc); | ||||
| 	    } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nagachika
						nagachika