[macruby-changes] [3063] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Sun Nov 29 23:35:12 PST 2009


Revision: 3063
          http://trac.macosforge.org/projects/ruby/changeset/3063
Author:   lsansonetti at apple.com
Date:     2009-11-29 23:35:11 -0800 (Sun, 29 Nov 2009)
Log Message:
-----------
when registering a method as a BS informal protocol, pad the signature with @ in case the ruby arity is greater than the objc one

Modified Paths:
--------------
    MacRuby/trunk/objc.h
    MacRuby/trunk/vm.cpp

Modified: MacRuby/trunk/objc.h
===================================================================
--- MacRuby/trunk/objc.h	2009-11-30 06:35:37 UTC (rev 3062)
+++ MacRuby/trunk/objc.h	2009-11-30 07:35:11 UTC (rev 3063)
@@ -168,6 +168,17 @@
     }
 }
 
+static inline unsigned int
+TypeArity(const char *type)
+{
+    unsigned int arity = 0;
+    while (*type != '\0') {
+	type = SkipFirstType(type);
+	arity++;
+    }
+    return arity;
+}
+
 #if defined(__cplusplus)
 }
 #endif

Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp	2009-11-30 06:35:37 UTC (rev 3062)
+++ MacRuby/trunk/vm.cpp	2009-11-30 07:35:11 UTC (rev 3063)
@@ -1610,7 +1610,16 @@
 	    GET_CORE()->find_bs_informal_protocol_method(sel,
 		    class_isMetaClass(klass));
 	if (informal_type != NULL) {
-	    strncpy(buf, informal_type->c_str(), buflen);
+	    // Get the signature from the BridgeSupport database as an
+	    // informal protocol method.
+	    const char *informal_type_str = informal_type->c_str();
+	    strncpy(buf, informal_type_str, buflen);
+            const unsigned int type_arity = TypeArity(informal_type_str);
+            if (oc_arity > type_arity) {
+		for (unsigned int i = type_arity; i < oc_arity; i++) {
+		    strlcat(buf, "@", buflen);
+		}
+	    } 
 	}
 	else {
 	    // Generate an automatic signature, using 'id' (@) for all
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091129/b15b2481/attachment.html>


More information about the macruby-changes mailing list