diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | bootstraptest/test_flow.rb | 13 | ||||
-rw-r--r-- | vm_eval.c | 2 |
3 files changed, 21 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Sat Dec 24 01:20:39 2011 Kazuki Tsujimoto <kazuki@callcc.net> + + * vm_eval.c (send_internal): PASS_PASSED_BLOCK_TH must be placed + just before calling rb_call0. + + * bootstraptest/test_flow.rb: add a test for above. + Sat Dec 24 00:55:16 2011 Tanaka Akira <akr@fsij.org> * lib/tempfile.rb (Tempfile#initialize): warn if a block is given. diff --git a/bootstraptest/test_flow.rb b/bootstraptest/test_flow.rb index d40d814fbc..ed273953de 100644 --- a/bootstraptest/test_flow.rb +++ b/bootstraptest/test_flow.rb @@ -549,3 +549,16 @@ assert_equal %Q{ENSURE\n}, %q{ assert_equal "false", src + %q{e.all? {false}}, bug assert_equal "true", src + %q{e.include?(:foo)}, bug end +assert_equal %q{ok}, %q{ + $x = :ok + o = Object.new + def o.inspect(*args) + yield if block_given? + super + end + begin + nil.public_send(o) {$x = :ng} + rescue + end + $x +} @@ -712,7 +712,6 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope) } vid = *argv++; argc--; - PASS_PASSED_BLOCK_TH(th); id = rb_check_id(&vid); if (!id) { @@ -723,6 +722,7 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope) } id = rb_to_id(vid); } + PASS_PASSED_BLOCK_TH(th); return rb_call0(recv, id, argc, argv, scope, self); } |