]> git.saurik.com Git - cycript.git/blobdiff - Decode.cpp
Make @encode(char *) and new Type("r*") both work.
[cycript.git] / Decode.cpp
index 7901515ba39be2d7cfa5e67dca094e4737e607a2..f99f61fa20bb0ee89f954fc886e0e0f2e0c30d44 100644 (file)
@@ -36,7 +36,7 @@ CYTypedIdentifier *Decode_(CYPool &pool, struct sig::Type *type) {
 
         case sig::typename_P: return $ CYTypedIdentifier($V("Class"));
         case sig::union_P: _assert(false); break;
-        case sig::string_P: return $ CYTypedIdentifier($V("char"), $ CYTypeConstant($ CYTypePointerTo()));
+        case sig::string_P: return $ CYTypedIdentifier($V("char"), $ CYTypePointerTo());
         case sig::selector_P: return $ CYTypedIdentifier($V("SEL"));
         case sig::block_P: _assert(false); break;
 
@@ -89,7 +89,11 @@ CYTypedIdentifier *Decode_(CYPool &pool, struct sig::Type *type) {
 
 CYTypedIdentifier *Decode(CYPool &pool, struct sig::Type *type) {
     CYTypedIdentifier *typed(Decode_(pool, type));
-    if ((type->flags & JOC_TYPE_CONST) != 0)
-        typed = typed->Modify($ CYTypeConstant());
+    if ((type->flags & JOC_TYPE_CONST) != 0) {
+        if (type->primitive == sig::string_P)
+            typed->modifier_ = $ CYTypeConstant(typed->modifier_);
+        else
+            typed = typed->Modify($ CYTypeConstant());
+    }
     return typed;
 }