[macruby-changes] [549] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Sep 3 15:34:54 PDT 2008


Revision: 549
          http://trac.macosforge.org/projects/ruby/changeset/549
Author:   lsansonetti at apple.com
Date:     2008-09-03 15:34:53 -0700 (Wed, 03 Sep 2008)
Log Message:
-----------
foo(*args) is always compiled as foo:, even if args is []

Modified Paths:
--------------
    MacRuby/trunk/gc.c
    MacRuby/trunk/vm_insnhelper.c

Modified: MacRuby/trunk/gc.c
===================================================================
--- MacRuby/trunk/gc.c	2008-09-03 22:20:17 UTC (rev 548)
+++ MacRuby/trunk/gc.c	2008-09-03 22:34:53 UTC (rev 549)
@@ -453,6 +453,7 @@
     if (__nsobject == NULL)
 	__nsobject = (void *)objc_getClass("NSObject");
     RBASIC(obj)->klass = (VALUE)__nsobject;
+    //DLOG("NEWOBJ", "size %ld -> %p", size, obj);
     return obj;
 }
 
@@ -1367,4 +1368,4 @@
     rb_define_method(rb_mKernel, "object_id", rb_obj_id, 0);
 
     rb_define_module_function(rb_mObSpace, "count_objects", count_objects, -1);
-}
\ No newline at end of file
+}

Modified: MacRuby/trunk/vm_insnhelper.c
===================================================================
--- MacRuby/trunk/vm_insnhelper.c	2008-09-03 22:20:17 UTC (rev 548)
+++ MacRuby/trunk/vm_insnhelper.c	2008-09-03 22:34:53 UTC (rev 549)
@@ -831,8 +831,23 @@
 	    else {
 		const char *p = (const char *)mcache->as.rcall.sel;
 		size_t len = strlen(p);
+		char buf[100];
+		if (p[len - 1] == ':' && num == 0) {
+		    SEL new_sel;
+
+		    /* foo(*args) is always compiled as foo:, even if args is [] */
+		    strncpy(buf, p, sizeof buf);
+		    buf[MIN(sizeof buf, len) - 1] = '\0';
+		    new_sel = sel_registerName(buf);
+		   
+		    mn = rb_objc_method_node2(klass, new_sel, NULL);
+		    if (mn != NULL) {
+			mcache->as.rcall.sel = new_sel;
+			mcache->as.rcall.node = mn;
+			goto rcall_dispatch;
+		    }
+		}
 		if (len >= 3) {
-		    char buf[100];
 		    SEL sel = 0;
 		    if (isalpha(p[len - 3]) && p[len - 2] == '=' && p[len - 1] == ':') {
 			/* foo=: -> setFoo: shortcut */
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080903/f70a5f40/attachment.html 


More information about the macruby-changes mailing list