]> git.saurik.com Git - cycript.git/commitdiff
Support variadic messages (bridge extras as object).
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jun 2012 20:59:32 +0000 (13:59 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jun 2012 20:59:32 +0000 (13:59 -0700)
ObjectiveC/Library.mm

index 81f182be5707bda764a82ce0693bbd1c5dcefc3d..10ce9cde9f535cc8dd4598469d64002dcdf51733 100644 (file)
@@ -2091,6 +2091,26 @@ JSValueRef CYSendMessage(apr_pool_t *pool, JSContextRef context, id self, Class
     sig::Signature signature;
     sig::Parse(pool, &signature, type, &Structor_);
 
+    size_t used(count + 3);
+    if (used > signature.count) {
+        sig::Element *elements(new (pool) sig::Element[used]);
+        memcpy(elements, signature.elements, used * sizeof(sig::Element));
+
+        for (size_t index(signature.count); index != used; ++index) {
+            sig::Element *element(&elements[index]);
+            element->name = NULL;
+            element->offset = _not(size_t);
+
+            sig::Type *type(new (pool) sig::Type);
+            memset(type, 0, sizeof(*type));
+            type->primitive = sig::object_P;
+            element->type = type;
+        }
+
+        signature.elements = elements;
+        signature.count = used;
+    }
+
     ffi_cif cif;
     sig::sig_ffi_cif(pool, &sig::ObjectiveC, &signature, &cif);