]> git.saurik.com Git - cycript.git/blobdiff - Decode.cpp
Unify the build environment for Android and Apple.
[cycript.git] / Decode.cpp
index b4998b4bae09bcf3d8a118e8dceafff99f58d8b4..1af478c189a32c2bec57fbf07a59a925d1f515ad 100644 (file)
@@ -56,6 +56,13 @@ CYTypedIdentifier *Primitive<signed int>::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeIntegral(CYTypeSigned, 1));
 }
 
+#ifdef __SIZEOF_INT128__
+template <>
+CYTypedIdentifier *Primitive<signed __int128>::Decode(CYPool &pool) const {
+    return $ CYTypedIdentifier($ CYTypeInt128(CYTypeSigned));
+}
+#endif
+
 template <>
 CYTypedIdentifier *Primitive<signed long int>::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeIntegral(CYTypeSigned, 2));
@@ -81,6 +88,13 @@ CYTypedIdentifier *Primitive<unsigned int>::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeIntegral(CYTypeUnsigned, 1));
 }
 
+#ifdef __SIZEOF_INT128__
+template <>
+CYTypedIdentifier *Primitive<unsigned __int128>::Decode(CYPool &pool) const {
+    return $ CYTypedIdentifier($ CYTypeInt128(CYTypeUnsigned));
+}
+#endif
+
 template <>
 CYTypedIdentifier *Primitive<unsigned long int>::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeIntegral(CYTypeUnsigned, 2));
@@ -108,6 +122,7 @@ CYTypedIdentifier *String::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeCharacter(CYTypeNeutral), $ CYTypePointerTo());
 }
 
+#ifdef CY_OBJECTIVEC
 CYTypedIdentifier *Meta::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeVariable("Class"));
 }
@@ -115,6 +130,7 @@ CYTypedIdentifier *Meta::Decode(CYPool &pool) const {
 CYTypedIdentifier *Selector::Decode(CYPool &pool) const {
     return $ CYTypedIdentifier($ CYTypeVariable("SEL"));
 }
+#endif
 
 CYTypedIdentifier *Bits::Decode(CYPool &pool) const {
     _assert(false);
@@ -128,12 +144,24 @@ CYTypedIdentifier *Array::Decode(CYPool &pool) const {
     return CYDecodeType(pool, &type)->Modify($ CYTypeArrayOf($D(size)));
 }
 
+#ifdef CY_OBJECTIVEC
 CYTypedIdentifier *Object::Decode(CYPool &pool) const {
     if (name == NULL)
         return $ CYTypedIdentifier($ CYTypeVariable("id"));
     else
         return $ CYTypedIdentifier($ CYTypeVariable(name), $ CYTypePointerTo());
 }
+#endif
+
+CYTypedIdentifier *Enum::Decode(CYPool &pool) const {
+    CYEnumConstant *values(NULL);
+    for (size_t i(count); i != 0; --i)
+        values = $ CYEnumConstant($I(pool.strdup(constants[i - 1].name)), $D(constants[i - 1].value), values);
+    CYIdentifier *identifier(name == NULL ? NULL : $I(name));
+    CYTypedIdentifier *typed(type.Decode(pool));
+    _assert(typed->modifier_ == NULL);
+    return $ CYTypedIdentifier($ CYTypeEnum(identifier, typed->specifier_, values));
+}
 
 CYTypedIdentifier *Aggregate::Decode(CYPool &pool) const {
     _assert(!overlap);
@@ -162,6 +190,7 @@ CYTypedIdentifier *Function::Modify(CYPool &pool, CYTypedIdentifier *result, CYT
     return result->Modify($ CYTypeFunctionWith(variadic, parameters));
 }
 
+#ifdef CY_OBJECTIVEC
 CYTypedIdentifier *Block::Modify(CYPool &pool, CYTypedIdentifier *result, CYTypedParameter *parameters) const {
     return result->Modify($ CYTypeBlockWith(parameters));
 }
@@ -171,6 +200,7 @@ CYTypedIdentifier *Block::Decode(CYPool &pool) const {
         return $ CYTypedIdentifier($ CYTypeVariable("NSBlock"), $ CYTypePointerTo());
     return Callable::Decode(pool);
 }
+#endif
 
 }