summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/vm.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/vm.c b/src/vm.c
index 324a90a41..43663012e 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1989,21 +1989,18 @@ RETRY_TRY_BLOCK:
if (!proc->env || !MRB_ENV_STACK_SHARED_P(proc->env)) {
goto L_BREAK_ERROR;
}
+ while (mrb->c->eidx > mrb->c->ci->epos) {
+ ecall(mrb, --mrb->c->eidx);
+ }
/* break from fiber block */
if (mrb->c->ci == mrb->c->cibase && mrb->c->ci->pc) {
struct mrb_context *c = mrb->c;
- while (mrb->c->eidx > 0) {
- ecall(mrb, --mrb->c->eidx);
- }
mrb->c = c->prev;
c->prev = NULL;
ci = mrb->c->ci;
}
if (ci->acc < 0) {
- while (mrb->c->eidx > mrb->c->ci->epos) {
- ecall(mrb, --mrb->c->eidx);
- }
ARENA_RESTORE(mrb, ai);
mrb->c->vmexec = FALSE;
mrb->exc = (struct RObject*)break_new(mrb, proc, v);