+#include "../Syntax.hpp"
+
+struct CYInstanceLiteral :
+ CYTarget
+{
+ CYNumber *number_;
+
+ CYInstanceLiteral(CYNumber *number) :
+ number_(number)
+ {
+ }
+
+ CYPrecedence(1)
+
+ virtual CYTarget *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
+struct CYObjCBlock :
+ CYTarget
+{
+ CYType *typed_;
+ CYTypedParameter *parameters_;
+ CYStatement *code_;
+
+ CYObjCBlock(CYType *typed, CYTypedParameter *parameters, CYStatement *code) :
+ typed_(typed),
+ parameters_(parameters),
+ code_(code)
+ {
+ }
+
+ CYPrecedence(1)
+
+ virtual CYTarget *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
+struct CYBox :
+ CYTarget
+{
+ CYExpression *value_;
+
+ CYBox(CYExpression *value) :
+ value_(value)
+ {
+ }
+
+ CYPrecedence(1)
+
+ virtual CYTarget *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
+struct CYObjCArray :
+ CYTarget
+{
+ CYElement *elements_;
+
+ CYObjCArray(CYElement *elements = NULL) :
+ elements_(elements)
+ {
+ }
+
+ CYPrecedence(0)
+
+ virtual CYTarget *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};
+
+struct CYObjCKeyValue :
+ CYNext<CYObjCKeyValue>
+{
+ CYExpression *key_;
+ CYExpression *value_;
+
+ CYObjCKeyValue(CYExpression *key, CYExpression *value, CYObjCKeyValue *next) :
+ CYNext<CYObjCKeyValue>(next),
+ key_(key),
+ value_(value)
+ {
+ }
+};
+
+struct CYObjCDictionary :
+ CYTarget
+{
+ CYObjCKeyValue *pairs_;
+
+ CYObjCDictionary(CYObjCKeyValue *pairs) :
+ pairs_(pairs)
+ {
+ }
+
+ CYPrecedence(0)
+
+ virtual CYTarget *Replace(CYContext &context);
+ virtual void Output(CYOutput &out, CYFlags flags) const;
+};