[macruby-changes] [294] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Mon Jun 16 01:50:24 PDT 2008
Revision: 294
http://trac.macosforge.org/projects/ruby/changeset/294
Author: lsansonetti at apple.com
Date: 2008-06-16 01:50:24 -0700 (Mon, 16 Jun 2008)
Log Message:
-----------
guess what? more perf work on the objc dispatcher
Modified Paths:
--------------
MacRuby/trunk/include/ruby/node.h
MacRuby/trunk/objc.m
MacRuby/trunk/vm_insnhelper.c
Modified: MacRuby/trunk/include/ruby/node.h
===================================================================
--- MacRuby/trunk/include/ruby/node.h 2008-06-16 02:24:16 UTC (rev 293)
+++ MacRuby/trunk/include/ruby/node.h 2008-06-16 08:50:24 UTC (rev 294)
@@ -507,7 +507,7 @@
void rb_add_method(VALUE, ID, NODE *, int);
void rb_add_method_direct(VALUE, ID, NODE *);
#if WITH_OBJC
-NODE *rb_objc_define_objc_mid_closure(VALUE, ID, NODE *);
+NODE *rb_objc_define_objc_mid_closure(VALUE, ID, ID);
#endif
NODE *rb_node_newnode(enum node_type,VALUE,VALUE,VALUE);
Modified: MacRuby/trunk/objc.m
===================================================================
--- MacRuby/trunk/objc.m 2008-06-16 02:24:16 UTC (rev 293)
+++ MacRuby/trunk/objc.m 2008-06-16 08:50:24 UTC (rev 294)
@@ -1500,20 +1500,17 @@
#endif
NODE *
-rb_objc_define_objc_mid_closure(VALUE recv, ID mid, NODE *node)
+rb_objc_define_objc_mid_closure(VALUE recv, ID mid, ID alias_mid)
{
SEL sel;
Class ocklass;
Method method;
VALUE mod;
- NODE *data;
+ NODE *node, *data;
Method (*getMethod)(Class, SEL);
assert(mid > 1);
- if (node != NULL)
- return NULL; /* TODO: verify that there isn't a prior method */
-
sel = sel_registerName(rb_id2name(mid));
if (!rb_special_const_p(recv) && !rb_objc_is_non_native(recv)
@@ -1560,6 +1557,9 @@
rb_add_method_direct(mod, mid, data);
+ if (alias_mid != 0)
+ rb_add_method_direct(mod, alias_mid, data);
+
return data->nd_body;
}
Modified: MacRuby/trunk/vm_insnhelper.c
===================================================================
--- MacRuby/trunk/vm_insnhelper.c 2008-06-16 02:24:16 UTC (rev 293)
+++ MacRuby/trunk/vm_insnhelper.c 2008-06-16 08:50:24 UTC (rev 294)
@@ -599,7 +599,7 @@
else {
int stat = 0;
#if WITH_OBJC
- mn = rb_objc_define_objc_mid_closure(recv, id, NULL);
+ mn = rb_objc_define_objc_mid_closure(recv, id, 0);
if (mn != NULL) {
return vm_call_method(th, cfp, num, blockptr, flag, id,
mn, recv, klass);
@@ -1160,25 +1160,16 @@
return;
}
}
- }
-
- if (*pmn == NULL) {
id = rb_objc_missing_sel(*pid, *pnum);
- if (id != *pid
- && (mn = rb_objc_define_objc_mid_closure(recv, id, NULL))
- != NULL) {
- *pmn = mn;
- *pid = id;
- return;
+ if (id != *pid) {
+ mn = rb_objc_define_objc_mid_closure(recv, id, *pid);
+ if (mn != NULL) {
+ *pmn = mn;
+ *pid = id;
+ return;
+ }
}
}
- else {
- mn = rb_objc_define_objc_mid_closure(recv, *pid, *pmn);
- if (mn != NULL) {
- *pmn = mn;
- return;
- }
- }
}
#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080616/26f2e7d9/attachment.htm
More information about the macruby-changes
mailing list