summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-12-06 07:53:00 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-12-06 17:28:20 +0900
commitb00d45b095e8586d07b0db51dde2794ab77b21ec (patch)
tree97f6c9d6e1e80d1223ac660262761c1f7f36cd24 /src
parent4a99f4949e64cf6232b6bae16734016906d42527 (diff)
downloadmruby-b00d45b095e8586d07b0db51dde2794ab77b21ec.tar.gz
mruby-b00d45b095e8586d07b0db51dde2794ab77b21ec.zip
`mrb_method_search_vm()` should gives the defined class.
Otherwise `super` may call a wrong method.
Diffstat (limited to 'src')
-rw-r--r--src/class.c2
1 files changed, 2 insertions, 0 deletions
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