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.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2019-09-18 10:31:28 +09:00
parent 47add060cc
commit ca2d47c20f
3 changed files with 28 additions and 2 deletions
+3
View File
@@ -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;