diff --git a/include/mruby/proc.h b/include/mruby/proc.h index def00628f..33018003c 100644 --- a/include/mruby/proc.h +++ b/include/mruby/proc.h @@ -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))) diff --git a/src/class.c b/src/class.c index 05e54e2e2..27cfddca8 100644 --- a/src/class.c +++ b/src/class.c @@ -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); } } diff --git a/src/vm.c b/src/vm.c index b504fdcc9..28fdfde7f 100644 --- a/src/vm.c +++ b/src/vm.c @@ -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 */ }