[macruby-changes] [639] MacRuby/trunk/vm_insnhelper.c
source_changes at macosforge.org
source_changes at macosforge.org
Sun Sep 28 22:13:09 PDT 2008
Revision: 639
http://trac.macosforge.org/projects/ruby/changeset/639
Author: lsansonetti at 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);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080928/0965f2e2/attachment.html
More information about the macruby-changes
mailing list