From fac2498e0299f13dffe4f09a7dd7657fb49bf643 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 17 Nov 2020 21:17:19 +0900 Subject: [Bug #11213] let defined?(super) call respond_to_missing? --- vm_method.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'vm_method.c') 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; } -- cgit v1.2.1