1 /* Cycript - Inlining/Optimizing JavaScript Compiler
 
   2  * Copyright (C) 2009  Jay Freeman (saurik)
 
   5 /* Modified BSD License {{{ */
 
   7  *        Redistribution and use in source and binary
 
   8  * forms, with or without modification, are permitted
 
   9  * provided that the following conditions are met:
 
  11  * 1. Redistributions of source code must retain the
 
  12  *    above copyright notice, this list of conditions
 
  13  *    and the following disclaimer.
 
  14  * 2. Redistributions in binary form must reproduce the
 
  15  *    above copyright notice, this list of conditions
 
  16  *    and the following disclaimer in the documentation
 
  17  *    and/or other materials provided with the
 
  19  * 3. The name of the author may not be used to endorse
 
  20  *    or promote products derived from this software
 
  21  *    without specific prior written permission.
 
  23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS''
 
  24  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 
  25  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 
  26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
  27  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
 
  28  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
  29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 
  30  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
  31  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 
  32  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 
  33  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 
  34  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 
  35  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 
  36  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
  40 #ifndef CYCRIPT_OBJECTIVEC_SYNTAX_HPP
 
  41 #define CYCRIPT_OBJECTIVEC_SYNTAX_HPP
 
  45 struct CYSelectorPart :
 
  46     CYNext<CYSelectorPart>,
 
  52     CYSelectorPart(CYWord *name, bool value, CYSelectorPart *next) :
 
  53         CYNext<CYSelectorPart>(next),
 
  59     CYString *Replace(CYContext &context);
 
  60     virtual void Output(CYOutput &out) const;
 
  66     CYSelectorPart *name_;
 
  68     CYSelector(CYSelectorPart *name) :
 
  75     virtual CYExpression *Replace(CYContext &context);
 
  76     virtual void Output(CYOutput &out, CYFlags flags) const;
 
  82     CYStatement *Replace(CYContext &context) const;
 
  83     void Output(CYOutput &out) const;
 
  86 struct CYMessageParameter :
 
  87     CYNext<CYMessageParameter>
 
  93     CYMessageParameter(CYWord *tag, CYExpression *type, CYIdentifier *name) :
 
 100     CYFunctionParameter *Parameters(CYContext &context) const;
 
 101     CYSelector *Selector(CYContext &context) const;
 
 102     CYSelectorPart *SelectorPart(CYContext &context) const;
 
 110     CYMessageParameter *parameters_;
 
 113     CYMessage(bool instance, CYExpression *type, CYMessageParameter *parameter, CYStatement *statements) :
 
 116         parameters_(parameter),
 
 121     CYStatement *Replace(CYContext &context, bool replace) const;
 
 122     void Output(CYOutput &out, bool replace) const;
 
 127     CYExpression *super_;
 
 129     CYMessage *messages_;
 
 131     CYClass(CYClassName *name, CYExpression *super, CYField *fields, CYMessage *messages) :
 
 139     CYExpression *Replace_(CYContext &context);
 
 140     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 143 struct CYClassExpression :
 
 147     CYClassExpression(CYClassName *name, CYExpression *super, CYField *fields, CYMessage *messages) :
 
 148         CYClass(name, super, fields, messages)
 
 154     virtual CYExpression *Replace(CYContext &context);
 
 155     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 158 struct CYClassStatement :
 
 162     CYClassStatement(CYClassName *name, CYExpression *super, CYField *fields, CYMessage *messages) :
 
 163         CYClass(name, super, fields, messages)
 
 167     virtual CYStatement *Replace(CYContext &context);
 
 168     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 175     CYMessage *messages_;
 
 177     CYCategory(CYClassName *name, CYMessage *messages) :
 
 183     virtual CYStatement *Replace(CYContext &context);
 
 184     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 190     CYArgument *arguments_;
 
 192     CYSend(CYArgument *arguments) :
 
 193         arguments_(arguments)
 
 199     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 202 struct CYSendDirect :
 
 207     CYSendDirect(CYExpression *self, CYArgument *arguments) :
 
 213     virtual CYExpression *Replace(CYContext &context);
 
 214     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 220     CYSendSuper(CYArgument *arguments) :
 
 225     virtual CYExpression *Replace(CYContext &context);
 
 226     virtual void Output(CYOutput &out, CYFlags flags) const;
 
 229 #endif/*CYCRIPT_OBJECTIVEC_SYNTAX_HPP*/