-CYExpression *CYObjCBlock::Replace(CYContext &context) {
- return $N2($V("Functor"), $ CYFunctionExpression(NULL, $ CYFunctionParameter($ CYDeclaration($ CYIdentifier("$cyt")), parameters_->Parameters(context)), statements_), parameters_->TypeSignature(context, $ CYAdd(type_->Replace(context), $ CYString("@"))));
+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) {
+ // XXX: wtf is happening here?
+ return $C1($ CYTypeExpression(($ CYType(*typed_))->Modify($ CYTypeBlockWith(parameters_))), $ CYFunctionExpression(NULL, parameters_->Parameters(context), code_));