X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/f33b048af6516bdeff373d3eb709f3d445233dc4..367eebb166684de7a659b4e9cd34565b62b7928d:/sig/parse.cpp diff --git a/sig/parse.cpp b/sig/parse.cpp index 1c0ec23..2f007de 100644 --- a/sig/parse.cpp +++ b/sig/parse.cpp @@ -118,7 +118,10 @@ struct Type *Parse_(apr_pool_t *pool, const char **name, char eos, bool named, C case '#': type->primitive = typename_P; break; case '(': - type->primitive = union_P; + if (type->data.signature.count < 2) + type->primitive = struct_P; + else + type->primitive = union_P; next = ')'; goto aggregate; @@ -157,13 +160,13 @@ struct Type *Parse_(apr_pool_t *pool, const char **name, char eos, bool named, C case '^': type->primitive = pointer_P; - if (**name == 'v') { - type->data.data.type = NULL; - ++*name; - } else if (**name == '"') { + if (**name == '"') { type->data.data.type = NULL; } else { type->data.data.type = Parse_(pool, name, eos, named, callback); + sig::Type *&target(type->data.data.type); + if (target != NULL && target->primitive == void_P) + target = NULL; } break;