]> git.saurik.com Git - cycript.git/blobdiff - Decode.cpp
Allow users to tab complete struct and enum names.
[cycript.git] / Decode.cpp
index 823e6b4b35a0d55642a16df86bec47f0939bec68..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));
@@ -139,6 +153,16 @@ CYTypedIdentifier *Object::Decode(CYPool &pool) const {
 }
 #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);