summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index 5300a6c1f9..439de65323 100644
--- a/eval.c
+++ b/eval.c
@@ -4213,12 +4213,18 @@ rb_undefined(obj, id, argc, argv, call_status)
{
VALUE *nargv;
+ last_call_status = call_status;
+
+ if (id == missing) {
+ PUSH_FRAME();
+ rb_f_missing(argc, argv, obj);
+ POP_FRAME();
+ }
+
nargv = ALLOCA_N(VALUE, argc+1);
nargv[0] = ID2SYM(id);
MEMCPY(nargv+1, argv, VALUE, argc);
- last_call_status = call_status;
-
return rb_funcall2(obj, missing, argc+1, nargv);
}