1 /* Cycript - Optimizing JavaScript Compiler/Runtime
2 * Copyright (C) 2009-2013 Jay Freeman (saurik)
5 /* GNU General Public License, Version 3 {{{ */
7 * Cycript is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published
9 * by the Free Software Foundation, either version 3 of the License,
10 * or (at your option) any later version.
12 * Cycript is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU 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
27 struct CYInstanceLiteral :
32 CYInstanceLiteral(CYNumber *number) :
39 virtual CYExpression *Replace(CYContext &context);
40 virtual void Output(CYOutput &out, CYFlags flags) const;
46 CYTypedIdentifier *typed_;
47 CYTypedParameter *parameters_;
48 CYStatement *statements_;
50 CYObjCBlock(CYTypedIdentifier *typed, CYTypedParameter *parameters, CYStatement *statements) :
52 parameters_(parameters),
53 statements_(statements)
59 virtual CYExpression *Replace(CYContext &context);
60 virtual void Output(CYOutput &out, CYFlags flags) const;
68 CYBox(CYExpression *value) :
75 virtual CYExpression *Replace(CYContext &context);
76 virtual void Output(CYOutput &out, CYFlags flags) const;
79 struct CYSelectorPart :
80 CYNext<CYSelectorPart>,
86 CYSelectorPart(CYWord *name, bool value, CYSelectorPart *next = NULL) :
87 CYNext<CYSelectorPart>(next),
93 CYString *Replace(CYContext &context);
94 virtual void Output(CYOutput &out) const;
100 CYSelectorPart *name_;
102 CYSelector(CYSelectorPart *name) :
109 virtual CYExpression *Replace(CYContext &context);
110 virtual void Output(CYOutput &out, CYFlags flags) const;
119 CYField(CYExpression *type, CYIdentifier *name, CYField *next = NULL) :
120 CYNext<CYField>(next),
126 CYStatement *Replace(CYContext &context) const;
127 void Output(CYOutput &out) const;
130 struct CYMessageParameter :
131 CYNext<CYMessageParameter>
137 CYMessageParameter(CYWord *tag, CYExpression *type, CYIdentifier *name) :
144 CYFunctionParameter *Parameters(CYContext &context) const;
145 CYSelector *Selector(CYContext &context) const;
146 CYSelectorPart *SelectorPart(CYContext &context) const;
147 CYExpression *TypeSignature(CYContext &context) const;
155 CYMessageParameter *parameters_;
158 CYMessage(bool instance, CYExpression *type, CYMessageParameter *parameter, CYStatement *statements) :
161 parameters_(parameter),
166 CYStatement *Replace(CYContext &context, bool replace) const;
167 void Output(CYOutput &out, bool replace) const;
169 CYExpression *TypeSignature(CYContext &context) const;
178 CYProtocol(CYExpression *name, CYProtocol *next = NULL) :
179 CYNext<CYProtocol>(next),
184 CYStatement *Replace(CYContext &context) const;
185 void Output(CYOutput &out) const;
194 CYModule(CYWord *part, CYModule *next = NULL) :
195 CYNext<CYModule>(next),
200 CYString *Replace(CYContext &context, const char *separator) const;
201 void Output(CYOutput &out) const;
209 CYImport(CYModule *module) :
214 virtual CYStatement *Replace(CYContext &context);
215 virtual void Output(CYOutput &out, CYFlags flags) const;
220 CYExpression *super_;
221 CYProtocol *protocols_;
223 CYMessage *messages_;
225 CYClass(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
228 protocols_(protocols),
237 CYExpression *Replace_(CYContext &context);
238 virtual void Output(CYOutput &out, CYFlags flags) const;
241 struct CYClassExpression :
245 CYClassExpression(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
246 CYClass(name, super, protocols, fields, messages)
252 virtual CYExpression *Replace(CYContext &context);
253 virtual void Output(CYOutput &out, CYFlags flags) const;
256 struct CYClassStatement :
260 CYClassStatement(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYField *fields, CYMessage *messages) :
261 CYClass(name, super, protocols, fields, messages)
265 virtual CYStatement *Replace(CYContext &context);
266 virtual void Output(CYOutput &out, CYFlags flags) const;
273 CYMessage *messages_;
275 CYCategory(CYClassName *name, CYMessage *messages) :
281 virtual CYStatement *Replace(CYContext &context);
282 virtual void Output(CYOutput &out, CYFlags flags) const;
288 CYArgument *arguments_;
290 CYSend(CYArgument *arguments) :
291 arguments_(arguments)
297 virtual void Output(CYOutput &out, CYFlags flags) const;
300 struct CYSendDirect :
305 CYSendDirect(CYExpression *self, CYArgument *arguments) :
311 virtual CYExpression *Replace(CYContext &context);
312 virtual void Output(CYOutput &out, CYFlags flags) const;
318 CYSendSuper(CYArgument *arguments) :
323 virtual CYExpression *Replace(CYContext &context);
324 virtual void Output(CYOutput &out, CYFlags flags) const;
327 #endif/*CYCRIPT_OBJECTIVEC_SYNTAX_HPP*/