[macruby-changes] [2978] MacRuby/trunk/vm.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Sat Nov 7 00:06:30 PST 2009
Revision: 2978
http://trac.macosforge.org/projects/ruby/changeset/2978
Author: lsansonetti at apple.com
Date: 2009-11-07 00:06:30 -0800 (Sat, 07 Nov 2009)
Log Message:
-----------
when mixing a class with a module, make sure to JIT methods that already exist in the target class
Modified Paths:
--------------
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2009-11-07 08:05:48 UTC (rev 2977)
+++ MacRuby/trunk/vm.cpp 2009-11-07 08:06:30 UTC (rev 2978)
@@ -2105,21 +2105,33 @@
continue;
}
+ rb_vm_method_source_t *m_src = iter2->second;
+
+ Method m = class_getInstanceMethod(to_class, sel);
+ if (m != NULL) {
+ // The method already exists - we need to JIT it.
+ IMP imp = GET_CORE()->compile(m_src->func);
+ resolve_method(to_class, sel, m_src->func, m_src->arity,
+ m_src->flags, imp, m);
+ }
+ else {
#if ROXOR_VM_DEBUG
- printf("lazy copy %c[%s %s] to %s\n",
- class_isMetaClass(from_class) ? '+' : '-',
- class_getName(from_class),
- sel_getName(sel),
- class_getName(to_class));
+ printf("lazy copy %c[%s %s] to %c%s\n",
+ class_isMetaClass(from_class) ? '+' : '-',
+ class_getName(from_class),
+ sel_getName(sel),
+ class_isMetaClass(to_class) ? '+' : '-',
+ class_getName(to_class));
#endif
- rb_vm_method_source_t *m = (rb_vm_method_source_t *)
- malloc(sizeof(rb_vm_method_source_t));
- m->func = iter2->second->func;
- m->arity = iter2->second->arity;
- m->flags = iter2->second->flags;
- dict->insert(std::make_pair(to_class, m));
- sels_to_add.push_back(sel);
+ rb_vm_method_source_t *m = (rb_vm_method_source_t *)
+ malloc(sizeof(rb_vm_method_source_t));
+ m->func = m_src->func;
+ m->arity = m_src->arity;
+ m->flags = m_src->flags;
+ dict->insert(std::make_pair(to_class, m));
+ sels_to_add.push_back(sel);
+ }
}
for (std::vector<SEL>::iterator i = sels_to_add.begin();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091107/848e0199/attachment.html>
More information about the macruby-changes
mailing list