X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/8b77acf10ecd1824cfd522f090e2288acead7384..d3865d294299f1d5404b59f4482ebb116c8fcee0:/Syntax.hpp diff --git a/Syntax.hpp b/Syntax.hpp index c091cec..cb39f40 100644 --- a/Syntax.hpp +++ b/Syntax.hpp @@ -577,17 +577,17 @@ struct CYParenthetical : void Output(CYOutput &out, CYFlags flags) const; }; -struct CYDeclaration; +struct CYBinding; struct CYFunctionParameter : CYNext, CYThing { - CYDeclaration *initialiser_; + CYBinding *binding_; - CYFunctionParameter(CYDeclaration *initialiser, CYFunctionParameter *next = NULL) : + CYFunctionParameter(CYBinding *binding, CYFunctionParameter *next = NULL) : CYNext(next), - initialiser_(initialiser) + binding_(binding) { } @@ -604,11 +604,6 @@ struct CYComprehension : { } - CYComprehension *Modify(CYComprehension *next) { - next_ = next; - return this; - } - virtual CYFunctionParameter *Parameter(CYContext &context) const = 0; CYFunctionParameter *Parameters(CYContext &context) const; virtual CYStatement *Replace(CYContext &context, CYStatement *statement) const; @@ -618,13 +613,13 @@ struct CYComprehension : struct CYForInComprehension : CYComprehension { - CYDeclaration *declaration_; - CYExpression *set_; + CYBinding *binding_; + CYExpression *iterable_; - CYForInComprehension(CYDeclaration *declaration, CYExpression *set, CYComprehension *next = NULL) : + CYForInComprehension(CYBinding *binding, CYExpression *iterable, CYComprehension *next = NULL) : CYComprehension(next), - declaration_(declaration), - set_(set) + binding_(binding), + iterable_(iterable) { } @@ -636,13 +631,13 @@ struct CYForInComprehension : struct CYForOfComprehension : CYComprehension { - CYDeclaration *declaration_; - CYExpression *set_; + CYBinding *binding_; + CYExpression *iterable_; - CYForOfComprehension(CYDeclaration *declaration, CYExpression *set, CYComprehension *next = NULL) : + CYForOfComprehension(CYBinding *binding, CYExpression *iterable, CYComprehension *next = NULL) : CYComprehension(next), - declaration_(declaration), - set_(set) + binding_(binding), + iterable_(iterable) { } @@ -896,6 +891,12 @@ struct CYThis : struct CYBoolean : CYTrivial { + CYPrecedence(4) + + virtual bool RightHand() const { + return true; + } + virtual bool Value() const = 0; virtual void Output(CYOutput &out, CYFlags flags) const; }; @@ -1062,11 +1063,11 @@ struct CYClause : CYThing, CYNext { - CYExpression *case_; + CYExpression *value_; CYStatement *code_; - CYClause(CYExpression *_case, CYStatement *code) : - case_(_case), + CYClause(CYExpression *value, CYStatement *code) : + value_(value), code_(code) { } @@ -1089,7 +1090,7 @@ struct CYElementValue : { CYExpression *value_; - CYElementValue(CYExpression *value, CYElement *next) : + CYElementValue(CYExpression *value, CYElement *next = NULL) : CYNext(next), value_(value) { @@ -1135,13 +1136,13 @@ struct CYArray : virtual void Output(CYOutput &out, CYFlags flags) const; }; -struct CYDeclaration { +struct CYBinding { CYIdentifier *identifier_; - CYExpression *initialiser_; + CYExpression *initializer_; - CYDeclaration(CYIdentifier *identifier, CYExpression *initialiser = NULL) : + CYBinding(CYIdentifier *identifier, CYExpression *initializer = NULL) : identifier_(identifier), - initialiser_(initialiser) + initializer_(initializer) { } @@ -1155,11 +1156,11 @@ struct CYForLexical : CYForInInitializer { bool constant_; - CYDeclaration *declaration_; + CYBinding *binding_; - CYForLexical(bool constant, CYDeclaration *declaration) : + CYForLexical(bool constant, CYBinding *binding) : constant_(constant), - declaration_(declaration) + binding_(binding) { } @@ -1172,10 +1173,10 @@ struct CYForLexical : struct CYForVariable : CYForInInitializer { - CYDeclaration *declaration_; + CYBinding *binding_; - CYForVariable(CYDeclaration *declaration) : - declaration_(declaration) + CYForVariable(CYBinding *binding) : + binding_(binding) { } @@ -1185,15 +1186,15 @@ struct CYForVariable : virtual void Output(CYOutput &out, CYFlags flags) const; }; -struct CYDeclarations : - CYNext, +struct CYBindings : + CYNext, CYThing { - CYDeclaration *declaration_; + CYBinding *binding_; - CYDeclarations(CYDeclaration *declaration, CYDeclarations *next = NULL) : - CYNext(next), - declaration_(declaration) + CYBindings(CYBinding *binding, CYBindings *next = NULL) : + CYNext(next), + binding_(binding) { } @@ -1209,10 +1210,10 @@ struct CYDeclarations : struct CYVar : CYForInitializer { - CYDeclarations *declarations_; + CYBindings *bindings_; - CYVar(CYDeclarations *declarations) : - declarations_(declarations) + CYVar(CYBindings *bindings) : + bindings_(bindings) { } @@ -1222,15 +1223,15 @@ struct CYVar : virtual void Output(CYOutput &out, CYFlags flags) const; }; -struct CYLet : +struct CYLexical : CYForInitializer { bool constant_; - CYDeclarations *declarations_; + CYBindings *bindings_; - CYLet(bool constant, CYDeclarations *declarations) : + CYLexical(bool constant, CYBindings *bindings) : constant_(constant), - declarations_(declarations) + bindings_(bindings) { } @@ -1241,7 +1242,7 @@ struct CYLet : }; struct CYBuilder { - CYList declarations_; + CYList bindings_; CYList statements_; operator bool() const { @@ -1261,6 +1262,8 @@ struct CYProperty : { } + virtual bool Update() const; + CYProperty *ReplaceAll(CYContext &context, CYBuilder &builder, CYExpression *self, bool update); void Replace(CYContext &context, CYBuilder &builder, CYExpression *self, bool protect); @@ -1289,13 +1292,13 @@ struct CYPropertyValue : struct CYFor : CYStatement { - CYForInitializer *initialiser_; + CYForInitializer *initializer_; CYExpression *test_; CYExpression *increment_; CYStatement *code_; - CYFor(CYForInitializer *initialiser, CYExpression *test, CYExpression *increment, CYStatement *code) : - initialiser_(initialiser), + CYFor(CYForInitializer *initializer, CYExpression *test, CYExpression *increment, CYStatement *code) : + initializer_(initializer), test_(test), increment_(increment), code_(code) @@ -1311,13 +1314,13 @@ struct CYFor : struct CYForIn : CYStatement { - CYForInInitializer *initialiser_; - CYExpression *set_; + CYForInInitializer *initializer_; + CYExpression *iterable_; CYStatement *code_; - CYForIn(CYForInInitializer *initialiser, CYExpression *set, CYStatement *code) : - initialiser_(initialiser), - set_(set), + CYForIn(CYForInInitializer *initializer, CYExpression *iterable, CYStatement *code) : + initializer_(initializer), + iterable_(iterable), code_(code) { } @@ -1331,13 +1334,13 @@ struct CYForIn : struct CYForInitialized : CYStatement { - CYDeclaration *declaration_; - CYExpression *set_; + CYBinding *binding_; + CYExpression *iterable_; CYStatement *code_; - CYForInitialized(CYDeclaration *declaration, CYExpression *set, CYStatement *code) : - declaration_(declaration), - set_(set), + CYForInitialized(CYBinding *binding, CYExpression *iterable, CYStatement *code) : + binding_(binding), + iterable_(iterable), code_(code) { } @@ -1351,13 +1354,13 @@ struct CYForInitialized : struct CYForOf : CYStatement { - CYForInInitializer *initialiser_; - CYExpression *set_; + CYForInInitializer *initializer_; + CYExpression *iterable_; CYStatement *code_; - CYForOf(CYForInInitializer *initialiser, CYExpression *set, CYStatement *code) : - initialiser_(initialiser), - set_(set), + CYForOf(CYForInInitializer *initializer, CYExpression *iterable, CYStatement *code) : + initializer_(initializer), + iterable_(iterable), code_(code) { } @@ -1715,6 +1718,8 @@ struct CYPropertyMethod : { } + bool Update() const override; + virtual CYFunctionExpression *Constructor(); virtual void Replace(CYContext &context, CYBuilder &builder, CYExpression *self, CYExpression *name, bool protect); @@ -2251,6 +2256,22 @@ struct CYExternal : virtual void Output(CYOutput &out, CYFlags flags) const; }; +struct CYTypeExpression : + CYTarget +{ + CYTypedIdentifier *typed_; + + CYTypeExpression(CYTypedIdentifier *typed) : + typed_(typed) + { + } + + CYPrecedence(0) + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out, CYFlags flags) const; +}; + struct CYTypeDefinition : CYStatement { @@ -2303,6 +2324,34 @@ struct CYTypeFunctionWith : virtual CYTypeFunctionWith *Function() { return this; } }; +struct CYTypeStructField : + CYNext +{ + CYTypedIdentifier *typed_; + + CYTypeStructField(CYTypedIdentifier *typed, CYTypeStructField *next = NULL) : + CYNext(next), + typed_(typed) + { + } +}; + +struct CYTypeStruct : + CYTypeSpecifier +{ + CYIdentifier *name_; + CYTypeStructField *fields_; + + CYTypeStruct(CYIdentifier *name, CYTypeStructField *fields) : + name_(name), + fields_(fields) + { + } + + virtual CYTarget *Replace(CYContext &context); + virtual void Output(CYOutput &out) const; +}; + namespace cy { namespace Syntax {