From b00d45b095e8586d07b0db51dde2794ab77b21ec Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 6 Dec 2017 07:53:00 +0900 Subject: `mrb_method_search_vm()` should gives the defined class. Otherwise `super` may call a wrong method. --- src/class.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/class.c') diff --git a/src/class.c b/src/class.c index c65038b87..986af5531 100644 --- a/src/class.c +++ b/src/class.c @@ -1398,6 +1398,7 @@ mrb_method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid) struct mrb_cache_entry *mc = &mrb->cache[h]; if (mc->c == c && mc->mid == mid) { + *cp = mc->c0; return mc->m; } #endif @@ -1413,6 +1414,7 @@ mrb_method_search_vm(mrb_state *mrb, struct RClass **cp, mrb_sym mid) *cp = c; #ifdef MRB_METHOD_CACHE mc->c = oc; + mc->c0 = c; mc->mid = mid; mc->m = m; #endif -- cgit v1.2.3