From 6a0b68f8b81adff8bc9fa58764eb014fa30de1c5 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 19 Apr 2017 19:41:40 +0900 Subject: Use trampoline technique for `instance_exec`; ref #3359 A new function `mrb_yield_cont()` is provided. You have to call it at the end of a C defined method, e.g. `return mrb_yield_cont()`. --- mrbgems/mruby-object-ext/src/object.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-object-ext/src') diff --git a/mrbgems/mruby-object-ext/src/object.c b/mrbgems/mruby-object-ext/src/object.c index 8a2325ef9..c6caf935f 100644 --- a/mrbgems/mruby-object-ext/src/object.c +++ b/mrbgems/mruby-object-ext/src/object.c @@ -1,6 +1,7 @@ #include #include #include +#include /* * call-seq: @@ -86,7 +87,8 @@ mrb_obj_instance_exec(mrb_state *mrb, mrb_value self) } args = mrb_ary_new_from_values(mrb, argc, argv); argv = RARRAY_PTR(args); - return mrb_yield_with_class(mrb, blk, argc, argv, self, c); + mrb->c->ci->target_class = c; + return mrb_yield_cont(mrb, blk, self, argc, argv); } void -- cgit v1.2.3