1 /* Cycript - Optimizing JavaScript Compiler/Runtime
2 * Copyright (C) 2009-2012 Jay Freeman (saurik)
5 /* GNU Lesser General Public License, Version 3 {{{ */
7 * Cycript is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU Lesser General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
12 * Cycript is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 * License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with Cycript. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef CYCRIPT_OBJECTIVEC_SYNTAX_HPP
23 #define CYCRIPT_OBJECTIVEC_SYNTAX_HPP
32 CYBox(CYExpression *value) :
39 virtual CYExpression *Replace(CYContext &context);
40 virtual void Output(CYOutput &out, CYFlags flags) const;
43 struct CYSelectorPart :
44 CYNext<CYSelectorPart>,
50 CYSelectorPart(CYWord *name, bool value, CYSelectorPart *next = NULL) :
51 CYNext<CYSelectorPart>(next),
57 CYString *Replace(CYContext &context);
58 virtual void Output(CYOutput &out) const;
64 CYSelectorPart *name_;
66 CYSelector(CYSelectorPart *name) :
73 virtual CYExpression *Replace(CYContext &context);
74 virtual void Output(CYOutput &out, CYFlags flags) const;
80 CYStatement *Replace(CYContext &context) const;
81 void Output(CYOutput &out) const;
84 struct CYMessageParameter :
85 CYNext<CYMessageParameter>
91 CYMessageParameter(CYWord *tag, CYExpression *type, CYIdentifier *name) :
98 CYFunctionParameter *Parameters(CYContext &context) const;
99 CYSelector *Selector(CYContext &context) const;
100 CYSelectorPart *SelectorPart(CYContext &context) const;
101 CYExpression *TypeSignature(CYContext &context) const;
109 CYMessageParameter *parameters_;
112 CYMessage(bool instance, CYExpression *type, CYMessageParameter *parameter, CYStatement *statements) :
115 parameters_(parameter),
120 CYStatement *Replace(CYContext &context, bool replace) const;
121 void Output(CYOutput &out, bool replace) const;
123 CYExpression *TypeSignature(CYContext &context) const;
132 CYProtocol(CYExpression *name, CYProtocol *next = NULL) :
133 CYNext<CYProtocol>(next),
138 CYStatement *Replace(CYContext &context) const;
139 void Output(CYOutput &out) const;
145 virtual CYStatement *Replace(CYContext &context);
146 virtual void Output(CYOutput &out, CYFlags flags) const;
151 CYExpression *super_;
152 CYProtocol *protocols_;
154 CYMessage *messages_;
156 CYClass(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
159 protocols_(protocols),
168 CYExpression *Replace_(CYContext &context);
169 virtual void Output(CYOutput &out, CYFlags flags) const;
172 struct CYClassExpression :
176 CYClassExpression(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
177 CYClass(name, super, protocols, fields, messages)
183 virtual CYExpression *Replace(CYContext &context);
184 virtual void Output(CYOutput &out, CYFlags flags) const;
187 struct CYClassStatement :
191 CYClassStatement(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
192 CYClass(name, super, protocols, fields, messages)
196 virtual CYStatement *Replace(CYContext &context);
197 virtual void Output(CYOutput &out, CYFlags flags) const;
204 CYMessage *messages_;
206 CYCategory(CYClassName *name, CYMessage *messages) :
212 virtual CYStatement *Replace(CYContext &context);
213 virtual void Output(CYOutput &out, CYFlags flags) const;
219 CYArgument *arguments_;
221 CYSend(CYArgument *arguments) :
222 arguments_(arguments)
228 virtual void Output(CYOutput &out, CYFlags flags) const;
231 struct CYSendDirect :
236 CYSendDirect(CYExpression *self, CYArgument *arguments) :
242 virtual CYExpression *Replace(CYContext &context);
243 virtual void Output(CYOutput &out, CYFlags flags) const;
249 CYSendSuper(CYArgument *arguments) :
254 virtual CYExpression *Replace(CYContext &context);
255 virtual void Output(CYOutput &out, CYFlags flags) const;
258 #endif/*CYCRIPT_OBJECTIVEC_SYNTAX_HPP*/