class.c: keep alias flag in proc object; fix #6098

This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-11-14 23:17:30 +09:00
parent 9959d4fc66
commit 91b4da3a2b
3 changed files with 4 additions and 2 deletions
+2
View File
@@ -86,6 +86,8 @@ struct RProc {
#define MRB_PROC_SCOPE_P(p) (((p)->flags & MRB_PROC_SCOPE) != 0)
#define MRB_PROC_NOARG 4096 /* for MRB_PROC_CFUNC_FL, it would be something like MRB_ARGS_NONE() or MRB_METHOD_NOARG_FL */
#define MRB_PROC_NOARG_P(p) (((p)->flags & MRB_PROC_NOARG) != 0)
#define MRB_PROC_ALIAS 8192
#define MRB_PROC_ALIAS_P(p) (((p)->flags & MRB_PROC_ALIAS) != 0)
#define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))
+1 -1
View File
@@ -2266,7 +2266,7 @@ mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b)
mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
}
p->e.env = e;
p->flags |= MRB_PROC_ENVSET;
p->flags |= MRB_PROC_ENVSET | MRB_PROC_ALIAS;
mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)e);
}
}
+1 -1
View File
@@ -1918,7 +1918,7 @@ RETRY_TRY_BLOCK:
struct RClass* target_class = CI_TARGET_CLASS(ci);
mid = ci->mid;
if (MRB_PROC_ENV_P(p) && p->e.env->mid && p->e.env->mid != mid) { /* alias support */
if (MRB_PROC_ALIAS_P(p) && MRB_PROC_ENV_P(p) && p->e.env->mid && p->e.env->mid != mid) { /* alias support */
mid = p->e.env->mid; /* restore old mid */
}