diff options
author | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-23 16:23:13 +0000 |
---|---|---|
committer | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-23 16:23:13 +0000 |
commit | dd834c683de09ae4f4ccfefbdaf4a36f20abc307 (patch) | |
tree | 9858f621b376e0d973ddfca4af6fa64fe9e126cf | |
parent | c6cbbd6eea91906d376636458fa24ebabc122beb (diff) | |
download | ruby-dd834c683de09ae4f4ccfefbdaf4a36f20abc307.tar.gz |
* 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.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34113 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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); } |