[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