@@ -976,7 +976,7 @@ MRB_API mrb_value
|
976 | 976 | mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c) |
977 | 977 | { |
978 | 978 | struct RProc *p; |
979 | | -mrb_sym mid = mrb->c->ci->mid; |
| 979 | +mrb_sym mid; |
980 | 980 | mrb_callinfo *ci; |
981 | 981 | mrb_value val; |
982 | 982 | mrb_int n; |
@@ -985,6 +985,12 @@ mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value
|
985 | 985 | ci = mrb->c->ci; |
986 | 986 | n = mrb_ci_nregs(ci); |
987 | 987 | p = mrb_proc_ptr(b); |
| 988 | +if (MRB_PROC_ENV_P(p)) { |
| 989 | +mid = p->e.env->mid; |
| 990 | + } |
| 991 | +else { |
| 992 | +mid = ci->mid; |
| 993 | + } |
988 | 994 | ci = cipush(mrb, n, CINFO_DIRECT, NULL, NULL, NULL, mid, 0); |
989 | 995 | funcall_args_capture(mrb, 0, argc, argv, mrb_nil_value(), ci); |
990 | 996 | ci->u.target_class = c; |
|