summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authordearblue <[email protected]>2021-06-12 16:08:21 +0900
committerdearblue <[email protected]>2021-06-12 16:08:21 +0900
commitb45d95fa9e825f10154207cf6411ea515b071c2b (patch)
treeb9da2275e906ed0b76bf197553a63dabc8be667a
parentf7777f64e6f8bbbe7048306e2834eb5726d2676b (diff)
downloadmruby-b45d95fa9e825f10154207cf6411ea515b071c2b.tar.gz
mruby-b45d95fa9e825f10154207cf6411ea515b071c2b.zip
Raise `TypeError` with `super` inside `instance_eval` / `class_eval`
Commit d0f60182af9114f6840d993d74f492e483302805 introduced an exception as a limitation of mruby. Subsequent CRuby-2.7 has changed its behavior to raise an exception. ref: https://github.com/ruby/ruby/commit/55b7ba368696033f2e89b77cbcd4a05dec97b139
-rw-r--r--src/vm.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/vm.c b/src/vm.c
index ac4f05067..9eb667daa 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1725,13 +1725,12 @@ RETRY_TRY_BLOCK:
else if (target_class->tt == MRB_TT_MODULE) {
target_class = mrb_vm_ci_target_class(ci);
if (target_class->tt != MRB_TT_ICLASS) {
- mrb_value exc = mrb_exc_new_lit(mrb, E_RUNTIME_ERROR, "superclass info lost [mruby limitations]");
- mrb_exc_set(mrb, exc);
- goto L_RAISE;
+ goto super_typeerror;
}
}
recv = regs[0];
if (!mrb_obj_is_kind_of(mrb, recv, target_class)) {
+ super_typeerror: ;
mrb_value exc = mrb_exc_new_lit(mrb, E_TYPE_ERROR,
"self has wrong type to call super in this context");
mrb_exc_set(mrb, exc);