From e3e96e3faa1683c8ee832cb6da6f9f96d18b0d77 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 9 Feb 2020 20:13:49 +0900 Subject: Check if bindable against the refined target [Bug #16617] --- proc.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'proc.c') diff --git a/proc.c b/proc.c index 47f4e668b5..83ec61d0f5 100644 --- a/proc.c +++ b/proc.c @@ -14,6 +14,7 @@ #include "internal.h" #include "internal/class.h" #include "internal/error.h" +#include "internal/eval.h" #include "internal/object.h" #include "internal/proc.h" #include "internal/symbol.h" @@ -2366,6 +2367,10 @@ convert_umethod_to_method_components(VALUE method, VALUE recv, VALUE *methclass_ VALUE iclass = data->me->defined_class; VALUE klass = CLASS_OF(recv); + if (RB_TYPE_P(methclass, T_MODULE)) { + VALUE refined_class = rb_refinement_module_get_refined_class(methclass); + if (!NIL_P(refined_class)) methclass = refined_class; + } if (!RB_TYPE_P(methclass, T_MODULE) && methclass != CLASS_OF(recv) && !rb_obj_is_kind_of(recv, methclass)) { if (FL_TEST(methclass, FL_SINGLETON)) { -- cgit v1.2.3