diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-07-07 15:49:17 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-07-07 15:49:17 +0000 |
commit | 804a3e100a8aa3da0bf80f5c6a37b6129e757860 (patch) | |
tree | 9fa3c40162214ed642d6c563fd30de62b6787682 /vm_eval.c | |
parent | 68260018df64bdb0ba88316ed47e47e53c6c0617 (diff) |
* vm_eval.c (yield_under): change prototype to get argc/argv.
* vm_eval.c (specific_eval): change for above.
* vm_eval.c (rb_obj_instance_exec): avoid object allocation.
* vm_eval.c (rb_mod_module_exec): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55606 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r-- | vm_eval.c | 15 |
1 files changed, 5 insertions, 10 deletions
@@ -1576,7 +1576,7 @@ rb_eval_cmd(VALUE cmd, VALUE arg, int level) /* block eval under the class/module context */ static VALUE -yield_under(VALUE under, VALUE self, VALUE values) +yield_under(VALUE under, VALUE self, int argc, const VALUE *argv) { rb_thread_t *th = GET_THREAD(); rb_block_t block, *blockptr; @@ -1589,12 +1589,7 @@ yield_under(VALUE under, VALUE self, VALUE values) } cref = vm_cref_push(th, under, blockptr, TRUE); - if (values == Qundef) { - return vm_yield_with_cref(th, 1, &self, cref); - } - else { - return vm_yield_with_cref(th, RARRAY_LENINT(values), RARRAY_CONST_PTR(values), cref); - } + return vm_yield_with_cref(th, argc, argv, cref); } VALUE @@ -1629,7 +1624,7 @@ specific_eval(int argc, const VALUE *argv, VALUE klass, VALUE self) { if (rb_block_given_p()) { rb_check_arity(argc, 0, 0); - return yield_under(klass, self, Qundef); + return yield_under(klass, self, 1, &self); } else { VALUE file = Qundef; @@ -1725,7 +1720,7 @@ VALUE rb_obj_instance_exec(int argc, const VALUE *argv, VALUE self) { VALUE klass = singleton_class_for_eval(self); - return yield_under(klass, self, rb_ary_new4(argc, argv)); + return yield_under(klass, self, argc, argv); } /* @@ -1786,7 +1781,7 @@ rb_mod_module_eval(int argc, const VALUE *argv, VALUE mod) VALUE rb_mod_module_exec(int argc, const VALUE *argv, VALUE mod) { - return yield_under(mod, mod, rb_ary_new4(argc, argv)); + return yield_under(mod, mod, argc, argv); } /* |