]> git.saurik.com Git - cycript.git/blobdiff - ObjectiveC/Replace.cpp
Do not use corrupt struct to store type reference.
[cycript.git] / ObjectiveC / Replace.cpp
index 04ed11c65680e69b4e19137651602990b03c8a56..9d6f1006cc27134b7f7f7280c08e67ad701de464 100644 (file)
@@ -1,5 +1,5 @@
-/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2015  Jay Freeman (saurik)
+/* Cycript - The Truly Universal Scripting Language
+ * Copyright (C) 2009-2016  Jay Freeman (saurik)
 */
 
 /* GNU Affero General Public License, Version 3 {{{ */
@@ -132,8 +132,29 @@ CYTarget *CYBox::Replace(CYContext &context) {
     return $C1($M($V("Instance"), $S("box")), value_);
 }
 
+CYTarget *CYObjCArray::Replace(CYContext &context) {
+    size_t count(0);
+    CYForEach (element, elements_)
+        ++count;
+    return $ CYSendDirect($V("NSArray"), $C_($ CYWord("arrayWithObjects"), $ CYArray(elements_), $C_($ CYWord("count"), $D(count))));
+}
+
+CYTarget *CYObjCDictionary::Replace(CYContext &context) {
+    CYList<CYElement> keys;
+    CYList<CYElement> values;
+    size_t count(0);
+
+    CYForEach (pair, pairs_) {
+        keys->*$ CYElementValue(pair->key_);
+        values->*$ CYElementValue(pair->value_);
+        ++count;
+    }
+
+    return $ CYSendDirect($V("NSDictionary"), $C_($ CYWord("dictionaryWithObjects"), $ CYArray(values), $C_($ CYWord("forKeys"), $ CYArray(keys), $C_($ CYWord("count"), $D(count)))));
+}
+
 CYTarget *CYObjCBlock::Replace(CYContext &context) {
-    return $C1($ CYEncodedType(($ CYTypedIdentifier(*typed_))->Modify($ CYTypeBlockWith(parameters_))), $ CYFunctionExpression(NULL, parameters_->Parameters(context), code_));
+    return $C1($ CYTypeExpression(($ CYTypedIdentifier(*typed_))->Modify($ CYTypeBlockWith(parameters_))), $ CYFunctionExpression(NULL, parameters_->Parameters(context), code_));
 }
 
 CYStatement *CYProtocol::Replace(CYContext &context) const { $T(NULL)