]> git.saurik.com Git - cycript.git/blobdiff - Replace.cpp
Analyze even more headers and added enum typedefs.
[cycript.git] / Replace.cpp
index 29a78a04c21b5c18c96d932d0bcdb0a07102dcd6..65d8236459baebc6b08340752f01f2c87cba03e2 100644 (file)
@@ -1236,6 +1236,18 @@ CYStatement *CYTypeDefinition::Replace(CYContext &context) {
     return $ CYLexical(false, $B1($B(identifier, $ CYTypeExpression(typed_))));
 }
 
+CYTarget *CYTypeEnum::Replace(CYContext &context) {
+    CYList<CYProperty> properties;
+    CYForEach (constant, constants_)
+        properties->*$ CYPropertyValue($S(constant->name_->Word()), constant->value_);
+    CYObject *constants($ CYObject(properties));
+
+    if (specifier_ == NULL)
+        return $N1($V("Type"), constants);
+    else
+        return $C1($M(specifier_->Replace(context), $S("enumFor")), constants);
+}
+
 CYTarget *CYTypeError::Replace(CYContext &context) {
     _assert(false);
     return NULL;
@@ -1276,7 +1288,14 @@ CYTarget *CYTypePointerTo::Replace_(CYContext &context, CYTarget *type) {
 }
 
 CYTarget *CYTypeReference::Replace(CYContext &context) {
-    return $V($pool.strcat(name_->Word(), "$cy", NULL));
+    const char *suffix;
+    switch (kind_) {
+        case CYTypeReferenceStruct: suffix = "$cys"; break;
+        case CYTypeReferenceEnum: suffix = "$cye"; break;
+        default: _assert(false);
+    }
+
+    return $V($pool.strcat(name_->Word(), suffix, NULL));
 }
 
 CYTarget *CYTypeStruct::Replace(CYContext &context) {