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>
|
||||
|
||||
* lib/rdoc/: Enable RDoc debugging only with $DEBUG_RDOC.
|
||||
|
|
|
@ -507,3 +507,43 @@ assert_equal "ok", %q{
|
|||
end
|
||||
foo(&:bar)
|
||||
}, '[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++) {
|
||||
env->env[i] = envptr[-local_size + i];
|
||||
#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)) {
|
||||
/* clear value stack for GC */
|
||||
envptr[-local_size + i] = 0;
|
||||
|
@ -315,6 +315,11 @@ vm_make_env_object(rb_thread_t *th, rb_control_frame_t *cfp)
|
|||
{
|
||||
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);
|
||||
|
||||
if (PROCDEBUG) {
|
||||
|
|
Loading…
Reference in a new issue