summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h2
-rw-r--r--src/class.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 5c8d38200..fc9656fbe 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -186,7 +186,7 @@ typedef struct {
#ifdef MRB_METHOD_CACHE
struct mrb_cache_entry {
- struct RClass *c;
+ struct RClass *c, *c0;
mrb_sym mid;
mrb_method_t m;
};
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