mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* vm.c: check frame is FINAL when creating env.
[ruby-core:14395] * bootstraptest/test_block.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									29962f8fb6
								
							
						
					
					
						commit
						b40dbc304e
					
				
					 3 changed files with 53 additions and 1 deletions
				
			
		| 
						 | 
					@ -1,3 +1,10 @@
 | 
				
			||||||
 | 
					Tue Dec 25 11:02:10 2007  Koichi Sasada  <ko1@atdot.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* vm.c: check frame is FINAL when creating env.
 | 
				
			||||||
 | 
						  [ruby-core:14395]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* bootstraptest/test_block.rb: add a test for above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Tue Dec 25 09:12:13 2007  Eric Hodel  <drbrain@segment7.net>
 | 
					Tue Dec 25 09:12:13 2007  Eric Hodel  <drbrain@segment7.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	* lib/rdoc/:  Enable RDoc debugging only with $DEBUG_RDOC.
 | 
						* lib/rdoc/:  Enable RDoc debugging only with $DEBUG_RDOC.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -507,3 +507,43 @@ assert_equal "ok", %q{
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  foo(&:bar)
 | 
					  foo(&:bar)
 | 
				
			||||||
}, '[ruby-core:14279]'
 | 
					}, '[ruby-core:14279]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert_normal_exit %q{
 | 
				
			||||||
 | 
					  class Controller
 | 
				
			||||||
 | 
					    def respond_to(&block)
 | 
				
			||||||
 | 
					      responder = Responder.new
 | 
				
			||||||
 | 
					      block.call(responder)
 | 
				
			||||||
 | 
					      responder.respond
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    def test_for_bug
 | 
				
			||||||
 | 
					      respond_to{|format|
 | 
				
			||||||
 | 
					        format.js{
 | 
				
			||||||
 | 
					          puts "in test"
 | 
				
			||||||
 | 
					          render{|obj|
 | 
				
			||||||
 | 
					            puts obj
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    def render(&block)
 | 
				
			||||||
 | 
					      puts "in render"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class Responder
 | 
				
			||||||
 | 
					    def method_missing(symbol, &block)
 | 
				
			||||||
 | 
					      puts "enter method_missing"
 | 
				
			||||||
 | 
					      @response = Proc.new{
 | 
				
			||||||
 | 
					        puts 'in method missing'
 | 
				
			||||||
 | 
					        block.call
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      puts "leave method_missing"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    def respond
 | 
				
			||||||
 | 
					      @response.call
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  t = Controller.new
 | 
				
			||||||
 | 
					  t.test_for_bug
 | 
				
			||||||
 | 
					}, '[ruby-core:14395]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								vm.c
									
										
									
									
									
								
							| 
						 | 
					@ -238,7 +238,7 @@ vm_make_env_each(rb_thread_t *th, rb_control_frame_t *cfp,
 | 
				
			||||||
    for (i = 0; i <= local_size; i++) {
 | 
					    for (i = 0; i <= local_size; i++) {
 | 
				
			||||||
	env->env[i] = envptr[-local_size + i];
 | 
						env->env[i] = envptr[-local_size + i];
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
	dp(env->env[i]);
 | 
						fprintf(stderr, "%2d ", &envptr[-local_size + i] - th->stack); dp(env->env[i]);
 | 
				
			||||||
	if (RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) {
 | 
						if (RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) {
 | 
				
			||||||
	    /* clear value stack for GC */
 | 
						    /* clear value stack for GC */
 | 
				
			||||||
	    envptr[-local_size + i] = 0;
 | 
						    envptr[-local_size + i] = 0;
 | 
				
			||||||
| 
						 | 
					@ -315,6 +315,11 @@ vm_make_env_object(rb_thread_t *th, rb_control_frame_t *cfp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VALUE envval;
 | 
					    VALUE envval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (VM_FRAME_FLAG(cfp->flag) == FRAME_MAGIC_FINISH) {
 | 
				
			||||||
 | 
						/* for method_missing */
 | 
				
			||||||
 | 
						cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    envval = vm_make_env_each(th, cfp, cfp->dfp, cfp->lfp);
 | 
					    envval = vm_make_env_each(th, cfp, cfp->dfp, cfp->lfp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (PROCDEBUG) {
 | 
					    if (PROCDEBUG) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue