Revision: 639 http://trac.macosforge.org/projects/ruby/changeset/639 Author: lsansonetti@apple.com Date: 2008-09-28 22:13:09 -0700 (Sun, 28 Sep 2008) Log Message: ----------- appropriately invalidating the objc method cache Modified Paths: -------------- MacRuby/trunk/vm_insnhelper.c Modified: MacRuby/trunk/vm_insnhelper.c =================================================================== --- MacRuby/trunk/vm_insnhelper.c 2008-09-29 03:14:51 UTC (rev 638) +++ MacRuby/trunk/vm_insnhelper.c 2008-09-29 05:13:09 UTC (rev 639) @@ -531,6 +531,7 @@ mn = NULL; if (mcache != NULL) { +cache_relookup: if (mcache->flags & RB_MCACHE_RCALL_FLAG) { if (mcache->as.rcall.klass == klass && mcache->as.rcall.node != NULL) { mn = mcache->as.rcall.node; @@ -641,8 +642,15 @@ else if (mcache->flags & RB_MCACHE_OCALL_FLAG) { rb_control_frame_t *reg_cfp; rb_control_frame_t *_cfp; - -ocall_dispatch: + + if (mcache->as.ocall.klass != klass) { + mcache->flags = RB_MCACHE_RCALL_FLAG; + mcache->as.rcall.klass = 0; + mcache->as.rcall.node = NULL; + goto cache_relookup; + } + +ocall_dispatch: reg_cfp = cfp; _cfp = vm_push_frame(th, 0, FRAME_MAGIC_CFUNC | (flag << FRAME_MAGIC_MASK_BITS), recv, (VALUE) blockptr, 0, reg_cfp->sp, 0, 1); @@ -888,6 +896,7 @@ mcache->as.rcall.sel, imp, method_getTypeEncoding(method))); mcache->flags = RB_MCACHE_OCALL_FLAG; + mcache->as.rcall.sel = sel; mcache->as.ocall.klass = klass; mcache->as.ocall.imp = imp; mcache->as.ocall.sig.argc = method_getNumberOfArguments(method);