From ce8b2d49732c30f984bcd6d6b345ccfd15790fff Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 24 Feb 2024 21:32:11 +0900 Subject: [PATCH] Added `mrb_callinfo::u.keep_context` for clarity --- include/mruby.h | 1 + mrbgems/mruby-fiber/src/fiber.c | 2 +- src/vm.c | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/mruby.h b/include/mruby.h index 5eb612719..175d5c48b 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -184,6 +184,7 @@ typedef struct { union { struct REnv *env; struct RClass *target_class; + const void *keep_context; /* if NULL, it means that the fiber has switched; for internal use */ } u; } mrb_callinfo; diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index c0fd4d751..82adf67bd 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -156,7 +156,7 @@ fiber_result(mrb_state *mrb, const mrb_value *a, mrb_int len) } /* mark return from context modifying method */ -#define MARK_CONTEXT_MODIFY(c) (c)->ci->u.target_class = NULL +#define MARK_CONTEXT_MODIFY(c) (c)->ci->u.keep_context = NULL static void fiber_check_cfunc(mrb_state *mrb, struct mrb_context *c) diff --git a/src/vm.c b/src/vm.c index ff5eeca37..3a4065d2e 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1915,7 +1915,7 @@ RETRY_TRY_BLOCK: mrb_gc_arena_shrink(mrb, ai); if (mrb->exc) goto L_RAISE; ci = mrb->c->ci; - if (!ci->u.target_class) { /* return from context modifying method (resume/yield) */ + if (!ci->u.keep_context) { /* return from context modifying method (resume/yield) */ if (ci->cci == CINFO_RESUMED) { mrb->jmp = prev_jmp; return recv; @@ -2410,7 +2410,7 @@ RETRY_TRY_BLOCK: ci = mrb->c->ci; } - if (mrb->c->vmexec && !CI_TARGET_CLASS(ci)) { + if (mrb->c->vmexec && !ci->u.keep_context) { mrb_gc_arena_restore(mrb, ai); mrb->c->vmexec = FALSE; mrb->jmp = prev_jmp;