mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
class.c: keep alias flag in proc object; fix #6098
This commit is contained in:
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user