diff options
| -rw-r--r-- | include/mruby.h | 2 | ||||
| -rw-r--r-- | src/class.c | 2 |
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 |
