From 804a3e100a8aa3da0bf80f5c6a37b6129e757860 Mon Sep 17 00:00:00 2001 From: naruse Date: Thu, 7 Jul 2016 15:49:17 +0000 Subject: * 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 --- ChangeLog | 10 ++++++++++ vm_eval.c | 15 +++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index ffaebbf3b9..687c0d1e28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Fri Jul 8 00:47:36 2016 NARUSE, Yui + + * 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. + Thu Jul 7 20:08:37 2016 Shugo Maeda * vm_args.c (vm_caller_setup_arg_block): disable symbol block diff --git a/vm_eval.c b/vm_eval.c index 4723781215..306f92a30e 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -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); } /* -- cgit v1.2.3