diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-02-06 20:03:14 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-02-06 20:03:14 +0000 |
commit | 4b295bb7ca2f4ea4aaee2eaf730fb55aae4f716e (patch) | |
tree | a023dd2f7778d1f8da207a3880f071c27e9c0f47 /vm_eval.c | |
parent | 15090079a26e0e432cd3d5df7b2b3d59e4fd3f9a (diff) |
merge revision(s) r34399:
* vm_eval.c (vm_call0): should pass block to enumerators. patched
by Kazuki Tsujimoto. [ruby-dev:44961][Bug #5731]
* vm_eval.c (method_missing), vm_insnhelper.c (vm_call_method):
ditto. patched by satoshi shiba.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r-- | vm_eval.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -118,6 +118,7 @@ vm_call0(rb_thread_t* th, VALUE recv, VALUE id, int argc, const VALUE *argv, RB_GC_GUARD(new_args); rb_ary_unshift(new_args, ID2SYM(id)); + th->passed_block = blockptr; return rb_funcall2(recv, idMethodMissing, argc+1, RARRAY_PTR(new_args)); } @@ -547,6 +548,7 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, int call_status) { VALUE *nargv, result, argv_ary = 0; rb_thread_t *th = GET_THREAD(); + const rb_block_t *blockptr = th->passed_block; th->method_missing_reason = call_status; th->passed_block = 0; @@ -572,6 +574,7 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, int call_status) if (rb_method_basic_definition_p(CLASS_OF(obj) , idMethodMissing)) { raise_method_missing(th, argc+1, nargv, obj, call_status | NOEX_MISSING); } + th->passed_block = blockptr; result = rb_funcall2(obj, idMethodMissing, argc + 1, nargv); if (argv_ary) rb_ary_clear(argv_ary); return result; |