From da48e7dbb20024c198493b8724adae1b842083aa Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 9 Mar 2022 15:20:13 +0900 Subject: [PATCH] fiber.c: should pack 15+ arguments in an array. --- mrbgems/mruby-fiber/src/fiber.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 0d85bedadc..322ed36ea8 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -208,15 +208,22 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr if (!c->ci->proc) { mrb_raise(mrb, E_FIBER_ERROR, "double resume (current)"); } - mrb_stack_extend(mrb, len+2); /* for receiver and (optional) block */ - b = c->stbase+1; - e = b + len; - while (bci--; /* pop dummy callinfo */ } + if (len >= 15) { + mrb_stack_extend(mrb, 3); /* for receiver, args and (optional) block */ + c->stbase[1] = mrb_ary_new_from_values(mrb, len, a); + len = 15; + } + else { + mrb_stack_extend(mrb, len+2); /* for receiver and (optional) block */ + b = c->stbase+1; + e = b + len; + while (bcibase->n = len; value = c->stbase[0] = MRB_PROC_ENV(c->cibase->proc)->stack[0]; }