mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	variable.c (rb_autoload_load): allow recursive calls
* variable.c (rb_autoload_load): allow recursive calls [ruby-core:71345] [Bug #11658] * test/ruby/test_autoload.rb (test_autoload_while_autoloading): new test by: Hiroshi Shirosaki <h.shirosaki@gmail.com> [ruby-core:71390] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									2b15d16987
								
							
						
					
					
						commit
						64c08dafe2
					
				
					 3 changed files with 30 additions and 0 deletions
				
			
		|  | @ -1,3 +1,11 @@ | |||
| Tue Nov 10 06:17:17 2015  Eric Wong  <e@80x24.org> | ||||
| 
 | ||||
| 	* variable.c (rb_autoload_load): allow recursive calls | ||||
| 	  [ruby-core:71345] [Bug #11658] | ||||
| 	* test/ruby/test_autoload.rb (test_autoload_while_autoloading): | ||||
| 	  new test by: Hiroshi Shirosaki <h.shirosaki@gmail.com> | ||||
| 	  [ruby-core:71390] | ||||
| 
 | ||||
| Tue Nov 10 00:36:46 2015  Tanaka Akira  <akr@fsij.org> | ||||
| 
 | ||||
| 	* lib/resolv.rb (Resolv::DNS::Message::MessageEncoder#put_labels): | ||||
|  |  | |||
|  | @ -215,6 +215,25 @@ p Foo::Bar | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def test_autoload_while_autoloading | ||||
|     ruby_impl_require do |called_with| | ||||
|       Tempfile.create(%w(a .rb)) do |a| | ||||
|         Tempfile.create(%w(b .rb)) do |b| | ||||
|           a.puts "require '#{b.path}'; class AutoloadTest; end" | ||||
|           b.puts "class AutoloadTest; module B; end; end" | ||||
|           [a, b].each(&:flush) | ||||
|           add_autoload(a.path) | ||||
|           begin | ||||
|             assert(Object::AutoloadTest) | ||||
|           ensure | ||||
|             remove_autoload_constant | ||||
|           end | ||||
|           assert_equal [a.path, b.path], called_with | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def add_autoload(path) | ||||
|     (@autoload_paths ||= []) << path | ||||
|     ::Object.class_eval {autoload(:AutoloadTest, path)} | ||||
|  |  | |||
|  | @ -2179,6 +2179,9 @@ rb_autoload_load(VALUE mod, ID id) | |||
| 	 */ | ||||
| 	list_head_init(&state.waitq.head); | ||||
|     } | ||||
|     else if (state.thread == ele->state->thread) { | ||||
| 	return Qfalse; | ||||
|     } | ||||
|     else { | ||||
| 	list_add_tail(&ele->state->waitq.head, &state.waitq.node); | ||||
| 	/*
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 normal
						normal