diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-06 07:53:00 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-06 17:28:20 +0900 |
| commit | b00d45b095e8586d07b0db51dde2794ab77b21ec (patch) | |
| tree | 97f6c9d6e1e80d1223ac660262761c1f7f36cd24 /src | |
| parent | 4a99f4949e64cf6232b6bae16734016906d42527 (diff) | |
| download | mruby-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.c | 2 |
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 |
