From 02873b722f8aed4f64b6ed533f1fa4c0eae457f7 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Sat, 11 Jan 2014 21:58:27 -0800 Subject: [PATCH 1/1] Make @encode(char *) and new Type("r*") both work. --- Decode.cpp | 10 +++++++--- Execute.cpp | 15 +++++++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Decode.cpp b/Decode.cpp index 7901515..f99f61f 100644 --- a/Decode.cpp +++ b/Decode.cpp @@ -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; } diff --git a/Execute.cpp b/Execute.cpp index 4282965..eb1970e 100644 --- a/Execute.cpp +++ b/Execute.cpp @@ -1139,11 +1139,18 @@ static JSValueRef Type_callAsFunction_pointerTo(JSContextRef context, JSObjectRe sig::Type type; type.name = NULL; - type.flags = 0; - type.primitive = sig::pointer_P; - type.data.data.type = internal->type_; - type.data.data.size = 0; + if (internal->type_->primitive == sig::char_P) { + type.flags = internal->type_->flags; + type.primitive = sig::string_P; + type.data.data.type = NULL; + type.data.data.size = 0; + } else { + type.flags = 0; + type.primitive = sig::pointer_P; + type.data.data.type = internal->type_; + type.data.data.size = 0; + } return CYMakeType(context, &type); } CYCatch(NULL) } -- 2.45.2