aboutsummaryrefslogtreecommitdiffstats
path: root/vm_method.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-11-17 21:17:19 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-11-20 16:04:45 +0900
commitfac2498e0299f13dffe4f09a7dd7657fb49bf643 (patch)
treead3780bc4d89b0f430d9149dce7a409794d89246 /vm_method.c
parent4b899f91647b7da1174492f891de3d6ee8128458 (diff)
downloadruby-fac2498e0299f13dffe4f09a7dd7657fb49bf643.tar.gz
[Bug #11213] let defined?(super) call respond_to_missing?
Diffstat (limited to 'vm_method.c')
-rw-r--r--vm_method.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/vm_method.c b/vm_method.c
index ec7d226580..a143db7cc5 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -2322,9 +2322,8 @@ basic_obj_respond_to_missing(rb_execution_context_t *ec, VALUE klass, VALUE obj,
}
static inline int
-basic_obj_respond_to(rb_execution_context_t *ec, VALUE obj, ID id, int pub)
+basic_obj_respond_to(rb_execution_context_t *ec, VALUE klass, VALUE obj, ID id, int pub)
{
- VALUE klass = CLASS_OF(obj);
VALUE ret;
switch (rb_method_boundp(klass, id, pub|BOUND_RESPONDS)) {
@@ -2393,15 +2392,14 @@ int
rb_obj_respond_to(VALUE obj, ID id, int priv)
{
rb_execution_context_t *ec = GET_EC();
- return rb_ec_obj_respond_to(ec, obj, id, priv);
+ return rb_ec_obj_respond_to(ec, CLASS_OF(obj), obj, id, priv);
}
int
-rb_ec_obj_respond_to(rb_execution_context_t *ec, VALUE obj, ID id, int priv)
+rb_ec_obj_respond_to(rb_execution_context_t *ec, VALUE klass, VALUE obj, ID id, int priv)
{
- VALUE klass = CLASS_OF(obj);
int ret = vm_respond_to(ec, klass, obj, id, priv);
- if (ret == -1) ret = basic_obj_respond_to(ec, obj, id, !priv);
+ if (ret == -1) ret = basic_obj_respond_to(ec, klass, obj, id, !priv);
return ret;
}
@@ -2446,7 +2444,7 @@ obj_respond_to(int argc, VALUE *argv, VALUE obj)
if (ret == Qundef) ret = Qfalse;
return ret;
}
- if (basic_obj_respond_to(ec, obj, id, !RTEST(priv)))
+ if (basic_obj_respond_to(ec, CLASS_OF(obj), obj, id, !RTEST(priv)))
return Qtrue;
return Qfalse;
}