]> git.saurik.com Git - cycript.git/commitdiff
Desktop Mac seems to use ^{_objc_class=...} instead of #.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 06:09:27 +0000 (06:09 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 1 Nov 2009 06:09:27 +0000 (06:09 +0000)
Internal.hpp
Library.cpp
sig/parse.cpp
sig/parse.hpp

index 0aaa38469a7803dd0fe7399a1017c3a57a65bb66..fff510bd97455efe3767b19289fa7934de7ee3a8 100644 (file)
@@ -49,7 +49,7 @@
 #include <sig/parse.hpp>
 #include <sig/ffi_type.hpp>
 
-void Structor_(apr_pool_t *pool, const char *name, const char *types, sig::Type *&type);
+void Structor_(apr_pool_t *pool, sig::Type *&type);
 
 struct Type_privateData :
     CYData
index 7bc867bd43f9c7c5009094ceb3b1a2ad2a9852b8..0f911282e64dd7fbca816fb6b617797dd91406bb 100644 (file)
@@ -340,8 +340,19 @@ struct CStringMapLess :
     }
 };
 
-void Structor_(apr_pool_t *pool, const char *name, const char *types, sig::Type *&type) {
-    if (name == NULL)
+void Structor_(apr_pool_t *pool, sig::Type *&type) {
+    if (
+        type->primitive == sig::pointer_P &&
+        type->data.data.type != NULL &&
+        type->data.data.type->primitive == sig::struct_P &&
+        strcmp(type->data.data.type->name, "_objc_class") == 0
+    ) {
+        type->primitive = sig::typename_P;
+        type->data.data.type = NULL;
+        return;
+    }
+
+    if (type->primitive != sig::struct_P || type->name == NULL)
         return;
 
     sqlite3_stmt *statement;
@@ -357,7 +368,7 @@ void Structor_(apr_pool_t *pool, const char *name, const char *types, sig::Type
         " limit 1"
     , -1, &statement, NULL));
 
-    _sqlcall(sqlite3_bind_text(statement, 1, name, -1, SQLITE_STATIC));
+    _sqlcall(sqlite3_bind_text(statement, 1, type->name, -1, SQLITE_STATIC));
 
     int mode;
     const char *value;
index 0a1d26fb8d86407ebeb3be42eb77acc17f8a48ce..9eac602be37620ec19185e049c9221b7d748e9e9 100644 (file)
@@ -201,17 +201,8 @@ struct Type *Parse_(apr_pool_t *pool, const char **name, char eos, bool named, C
 
             // XXX: this types thing is a throwback to JocStrap
 
-            char *types;
-            if (next != '=') {
-                types = NULL;
-            } else {
-                const char *temp(*name);
+            if (next == '=')
                 Parse_(pool, &type->data.signature, name, end, callback);
-                types = (char *) apr_pstrmemdup(pool, temp, *name - temp - 1);
-            }
-
-            if (callback != NULL)
-                (*callback)(pool, type->name, types, type);
         } break;
 
         case 'N': type->flags |= JOC_TYPE_INOUT; goto next;
@@ -232,6 +223,9 @@ struct Type *Parse_(apr_pool_t *pool, const char **name, char eos, bool named, C
             _assert(false);
     }
 
+    if (callback != NULL)
+        (*callback)(pool, type);
+
     return type;
 }
 
index dccbefc1f94c3b16e03be038424907158d8eed9d..d3493e6cfdd747e3daa013f6b9c98a1aad36159a 100644 (file)
@@ -46,7 +46,7 @@
 
 namespace sig {
 
-typedef void (*Callback)(apr_pool_t *pool, const char *name, const char *types, Type *&type);
+typedef void (*Callback)(apr_pool_t *pool, Type *&type);
 void Parse(apr_pool_t *pool, struct Signature *signature, const char *name, Callback callback);
 
 const char *Unparse(apr_pool_t *pool, struct Signature *signature);