summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-09-18 10:31:28 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-09-18 10:31:28 +0900
commitca2d47c20f91dc0ceec72052c28717bb0d7a74ef (patch)
tree807a212e030f00135141b255b10a317458d610ed /src/proc.c
parent47add060cc9e7b8492b5fda0dd712bcd2d7f0d32 (diff)
downloadmruby-ca2d47c20f91dc0ceec72052c28717bb0d7a74ef.tar.gz
mruby-ca2d47c20f91dc0ceec72052c28717bb0d7a74ef.zip
Fix `super` from aliased methods to work correctly; fix #4718
We needed to preserve the original method name somewhere. We kept it in the `env` structure pointed from aliased methods. #1457 and #1531 tried to address this issue. But this patch is more memory efficient. Limitation: this fix does not support `super` from methods defined by `define_method`. This limitation may be addressed in the future, but it's low priority.
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/proc.c b/src/proc.c
index 5283e5a3e..5f32fcfd1 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -77,6 +77,9 @@ closure_setup(mrb_state *mrb, struct RProc *p)
e->c = tc;
mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc);
}
+ if (MRB_PROC_ENV_P(up) && MRB_PROC_ENV(up)->cxt == NULL) {
+ e->mid = MRB_PROC_ENV(up)->mid;
+ }
}
if (e) {
p->e.env = e;