1 /* Cycript - Optimizing JavaScript Compiler/Runtime
 
   2  * Copyright (C) 2009-2015  Jay Freeman (saurik)
 
   5 /* GNU Affero General Public License, Version 3 {{{ */
 
   7  * This program is free software: you can redistribute it and/or modify
 
   8  * it under the terms of the GNU Affero General Public License as published by
 
   9  * the Free Software Foundation, either version 3 of the License, or
 
  10  * (at your option) any later version.
 
  12  * This program is distributed in the hope that it will be useful,
 
  13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  15  * GNU Affero General Public License for more details.
 
  17  * You should have received a copy of the GNU Affero General Public License
 
  18  * along with this program.  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_;
 
  50     CYObjCBlock(CYTypedIdentifier *typed, CYTypedParameter *parameters, CYStatement *code) :
 
  52         parameters_(parameters),
 
  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;
 
 113 struct CYClassField :
 
 116     CYTypedIdentifier *typed_;
 
 118     CYClassField(CYTypedIdentifier *typed, CYClassField *next = NULL) :
 
 119         CYNext<CYClassField>(next),
 
 124     CYStatement *Replace(CYContext &context) const;
 
 125     void Output(CYOutput &out) const;
 
 128 struct CYMessageParameter :
 
 129     CYNext<CYMessageParameter>
 
 132     CYTypedIdentifier *type_;
 
 134     CYMessageParameter(CYWord *tag, CYTypedIdentifier *type) :
 
 140     CYFunctionParameter *Parameters(CYContext &context) const;
 
 141     CYSelector *Selector(CYContext &context) const;
 
 142     CYSelectorPart *SelectorPart(CYContext &context) const;
 
 143     CYExpression *TypeSignature(CYContext &context) const;
 
 150     CYTypedIdentifier *type_;
 
 151     CYMessageParameter *parameters_;
 
 154     CYMessage(bool instance, CYTypedIdentifier *type, CYMessageParameter *parameter, CYStatement *code) :
 
 157         parameters_(parameter),
 
 162     CYStatement *Replace(CYContext &context, bool replace) const;
 
 163     void Output(CYOutput &out, bool replace) const;
 
 165     CYExpression *TypeSignature(CYContext &context) const;
 
 174     CYProtocol(CYExpression *name, CYProtocol *next = NULL) :
 
 175         CYNext<CYProtocol>(next),
 
 180     CYStatement *Replace(CYContext &context) const;
 
 181     void Output(CYOutput &out) const;
 
 186     CYExpression *super_;
 
 187     CYProtocol *protocols_;
 
 188     CYClassField *fields_;
 
 189     CYMessage *messages_;
 
 191     CYClass(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
 
 194         protocols_(protocols),
 
 203     CYExpression *Replace_(CYContext &context);
 
 204     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 207 struct CYClassExpression :
 
 211     CYClassExpression(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
 
 212         CYClass(name, super, protocols, fields, messages)
 
 218     virtual CYExpression *Replace(CYContext &context);
 
 219     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 222 struct CYClassStatement :
 
 226     CYClassStatement(CYClassName *name, CYExpression *super, CYProtocol *protocols, CYClassField *fields, CYMessage *messages) :
 
 227         CYClass(name, super, protocols, fields, messages)
 
 231     virtual CYStatement *Replace(CYContext &context);
 
 232     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 239     CYMessage *messages_;
 
 241     CYCategory(CYClassName *name, CYMessage *messages) :
 
 247     virtual CYStatement *Replace(CYContext &context);
 
 248     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 254     CYArgument *arguments_;
 
 256     CYSend(CYArgument *arguments) :
 
 257         arguments_(arguments)
 
 263     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 266 struct CYSendDirect :
 
 271     CYSendDirect(CYExpression *self, CYArgument *arguments) :
 
 277     virtual CYExpression *Replace(CYContext &context);
 
 278     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 284     CYSendSuper(CYArgument *arguments) :
 
 289     virtual CYExpression *Replace(CYContext &context);
 
 290     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 293 #endif/*CYCRIPT_OBJECTIVEC_SYNTAX_HPP*/