X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/70234143cce404215fb1809116076d23f6091521..296ee9a6e2205ff657ea382b240193a246fca434:/Cycript.yy.in diff --git a/Cycript.yy.in b/Cycript.yy.in index fe1873f..047983b 100644 --- a/Cycript.yy.in +++ b/Cycript.yy.in @@ -1,20 +1,20 @@ /* Cycript - Optimizing JavaScript Compiler/Runtime - * Copyright (C) 2009-2012 Jay Freeman (saurik) + * Copyright (C) 2009-2013 Jay Freeman (saurik) */ -/* GNU Lesser General Public License, Version 3 {{{ */ +/* GNU General Public License, Version 3 {{{ */ /* - * Cycript is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. + * Cycript is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. * - * Cycript is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. + * Cycript is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License + * You should have received a copy of the GNU General Public License * along with Cycript. If not, see . **/ /* }}} */ @@ -81,9 +81,6 @@ typedef struct { CYString *string_; CYThis *this_; CYTrue *true_; - CYTypeModifier *type_; - CYTypedIdentifier *typedIdentifier_; - CYTypedParameter *typedParameter_; CYWord *word_; @begin ObjectiveC @@ -93,6 +90,9 @@ typedef struct { CYMessageParameter *messageParameter_; CYProtocol *protocol_; CYSelectorPart *selector_; + CYTypeModifier *type_; + CYTypedIdentifier *typedIdentifier_; + CYTypedParameter *typedParameter_; @end @begin E4X @@ -557,8 +557,10 @@ LexNoFunction : { if (yychar == yyempty_) driver.no_.Function = true; else if (yychar == token::Function) yychar = token::Function_; } ; -LexNoAtImplementation - : { if (yychar == yyempty_) driver.no_.AtImplementation = true; else if (yychar == token::AtImplementation) yychar = token::AtImplementation_; } +LexNoAtImplementation : +@begin ObjectiveC + { if (yychar == yyempty_) driver.no_.AtImplementation = true; else if (yychar == token::AtImplementation) yychar = token::AtImplementation_; } +@end ; LexSetStatement @@ -723,7 +725,7 @@ TerminatorOpt /* 11.1 Primary Expressions {{{ */ Parenthetical - : "(" LexPushInOff Expression LexPopIn ")" { $$ = $3; } + : "(" LexPushInOff Expression ")" LexPopIn { $$ = $3; } ; ParentheticalOpt @@ -748,7 +750,7 @@ PrimaryExpression /* }}} */ /* 11.1.4.1 Array Initialiser {{{ */ ArrayLiteral - : "[" LexPushInOff ElementListOpt LexPopIn "]" { $$ = CYNew CYArray($3); } + : "[" LexPushInOff ElementListOpt "]" LexPopIn { $$ = CYNew CYArray($3); } ; Element @@ -772,7 +774,7 @@ ElementListOpt /* }}} */ /* 11.1.4.2 Array Comprehension {{{ */ PrimaryExpression - : "[" LexPushInOff AssignmentExpression ComprehensionForList LexPopIn "]" { $$ = CYNew CYArrayComprehension($3, $4); } + : "[" LexPushInOff AssignmentExpression ComprehensionForList "]" LexPopIn { $$ = CYNew CYArrayComprehension($3, $4); } ; ComprehensionForList @@ -788,7 +790,7 @@ ComprehensionForListOpt /* }}} */ /* 11.1.5 Object Initialiser {{{ */ ObjectLiteral - : BRACE LexPushInOff PropertyDefinitionListOpt LexPopIn "}" { $$ = CYNew CYObject($3); } + : BRACE LexPushInOff PropertyDefinitionListOpt "}" LexPopIn { $$ = CYNew CYObject($3); } ; PropertyDefinitionList_ @@ -826,7 +828,7 @@ PropertyName /* 11.2 Left-Hand-Side Expressions {{{ */ MemberAccess - : "[" LexPushInOff Expression LexPopIn "]" { $$ = CYNew CYDirectMember(NULL, $3); } + : "[" LexPushInOff Expression "]" LexPopIn { $$ = CYNew CYDirectMember(NULL, $3); } | "." IdentifierName { $$ = CYNew CYDirectMember(NULL, CYNew CYString($2)); } | "." AutoComplete { driver.mode_ = CYDriver::AutoDirect; YYACCEPT; } ; @@ -858,7 +860,7 @@ CallExpression ; Arguments - : "(" LexPushInOff ArgumentListOpt LexPopIn ")" { $$ = $3; } + : "(" LexPushInOff ArgumentListOpt ")" LexPopIn { $$ = $3; } ; ArgumentList_ @@ -980,7 +982,7 @@ LogicalORExpression /* 11.12 Conditional Operator ( ? : ) {{{ */ ConditionalExpression : LogicalORExpression { $$ = $1; } - | LogicalORExpression "?" LexPushInOff AssignmentExpression LexPopIn ":" AssignmentExpression { $$ = CYNew CYCondition($1, $4, $7); } + | LogicalORExpression "?" LexPushInOff AssignmentExpression ":" LexPopIn AssignmentExpression { $$ = CYNew CYCondition($1, $4, $7); } ; /* }}} */ /* 11.13 Assignment Operators {{{ */ @@ -1179,7 +1181,7 @@ IterationStatement /* }}} */ /* 12.6.3 The for Statement {{{ */ IterationStatement - : "for" "(" LexPushInOn ForStatementInitialiser LexPopIn ";" ExpressionOpt ";" ExpressionOpt ")" Statement { $$ = CYNew CYFor($4, $7, $9, $11); } + : "for" "(" LexPushInOn ForStatementInitialiser ";" LexPopIn ExpressionOpt ";" ExpressionOpt ")" Statement { $$ = CYNew CYFor($4, $7, $9, $11); } ; ForStatementInitialiser @@ -1189,8 +1191,8 @@ ForStatementInitialiser /* }}} */ /* 12.6.4 The for-in and for-of Statements {{{ */ IterationStatement - : "for" "(" LexPushInOn ForInStatementInitialiser LexPopIn "!in" Expression ")" Statement { $$ = CYNew CYForIn($4, $7, $9); } - | "for" "(" LexPushInOn ForInStatementInitialiser LexPopIn "of" Expression ")" Statement { $$ = CYNew CYForOf($4, $7, $9); } + : "for" "(" LexPushInOn ForInStatementInitialiser "!in" LexPopIn Expression ")" Statement { $$ = CYNew CYForIn($4, $7, $9); } + | "for" "(" LexPushInOn ForInStatementInitialiser "of" LexPopIn Expression ")" Statement { $$ = CYNew CYForOf($4, $7, $9); } ; ForInStatementInitialiser @@ -1284,7 +1286,7 @@ FunctionDeclaration ; FunctionExpression - : "function" IdentifierOpt "(" LexPushInOff FormalParameterListOpt LexPopIn ")" BRACE LexPushInOff FunctionBody LexPopIn "}" { $$ = CYNew CYFunctionExpression($2, $5, $10); } + : "function" IdentifierOpt "(" LexPushInOff FormalParameterListOpt ")" LexPopIn BRACE LexPushInOff FunctionBody "}" LexPopIn { $$ = CYNew CYFunctionExpression($2, $5, $10); } ; FormalParameterList_ @@ -1326,7 +1328,7 @@ ArrowParameters ConciseBody : AssignmentExpression { $$ = CYNew CYReturn($1); } - | LexSetRegExp ";{" LexPushInOff FunctionBody LexPopIn "}" { $$ = $4; } + | LexSetRegExp ";{" LexPushInOff FunctionBody "}" LexPopIn { $$ = $4; } ; /* }}} */ /* 14 Program {{{ */ @@ -1348,8 +1350,8 @@ ProgramBodyOpt /* Cycript (Objective-C): Type Encoding {{{ */ SuffixedType : IdentifierOpt { $$ = CYNew CYTypedIdentifier($1); } - | "(" LexPushInOff PrefixedType LexPopIn ")" { $$ = $3; } - | SuffixedType "[" NumericLiteral "]" { CYSetLast($1->type_) = CYNew CYTypeArrayOf($3->Value()); $$ = $1; } + | "(" LexPushInOff PrefixedType ")" LexPopIn { $$ = $3; } + | SuffixedType "[" NumericLiteral "]" { CYSetLast($1->type_) = CYNew CYTypeArrayOf($3); $$ = $1; } ; PrefixedType @@ -1466,7 +1468,7 @@ ClassProtocolListOpt ; ClassExpression - : "@implementation" LexPushInOff ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt LexPopIn "@end" { $$ = CYNew CYClassExpression($3, $4, $5, $6, $7); } + : "@implementation" LexPushInOff ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt "@end" LexPopIn { $$ = CYNew CYClassExpression($3, $4, $5, $6, $7); } ; ClassStatement @@ -1516,8 +1518,8 @@ SelectorList ; MessageExpression - : "[" LexPushInOff AssignmentExpression { driver.contexts_.push_back($3); } SelectorList LexPopIn "]" { driver.contexts_.pop_back(); } { $$ = CYNew CYSendDirect($3, $5); } - | "[" LexPushInOff LexSetRegExp "super" { driver.context_ = NULL; } SelectorList LexPopIn "]" { $$ = CYNew CYSendSuper($6); } + : "[" LexPushInOff AssignmentExpression { driver.contexts_.push_back($3); } SelectorList "]" LexPopIn { driver.contexts_.pop_back(); } { $$ = CYNew CYSendDirect($3, $5); } + | "[" LexPushInOff LexSetRegExp "super" { driver.context_ = NULL; } SelectorList "]" LexPopIn { $$ = CYNew CYSendSuper($6); } ; SelectorExpression_ @@ -1536,7 +1538,7 @@ SelectorExpressionOpt PrimaryExpression : MessageExpression { $$ = $1; } - | "@selector" "(" LexPushInOff SelectorExpression LexPopIn ")" { $$ = CYNew CYSelector($4); } + | "@selector" "(" LexPushInOff SelectorExpression ")" LexPopIn { $$ = CYNew CYSelector($4); } ; /* }}} */ /* Cycript (Objective-C): @import Directive {{{ */ @@ -1587,7 +1589,7 @@ TypedParameterListOpt ; PrimaryExpression - : "^" ModifiedType "(" LexPushInOff TypedParameterListOpt LexPopIn ")" BRACE LexPushInOff FunctionBody LexPopIn "}" { $$ = CYNew CYObjCBlock($2, $5, $10); } + : "^" ModifiedType "(" LexPushInOff TypedParameterListOpt ")" LexPopIn BRACE LexPushInOff FunctionBody "}" LexPopIn { $$ = CYNew CYObjCBlock($2, $5, $10); } ; /* }}} */ @end @@ -1688,7 +1690,7 @@ AttributeIdentifier PropertySelector_ : PropertySelector { $$ = $1; } - | "[" LexPushInOff Expression LexPopIn "]" { $$ = CYNew CYSelector($3); } + | "[" LexPushInOff Expression "]" LexPopIn { $$ = CYNew CYSelector($3); } ; PropertySelector @@ -1718,8 +1720,8 @@ XMLInitialiser ; XMLElement - : "<" LexPushInOff XMLTagContent LexPop LexPopIn "/>" - | "<" LexPushInOff XMLTagContent ">" LexSetXMLContent XMLElementContentOpt "" + : "<" LexPushInOff XMLTagContent LexPop "/>" LexPopIn + | "<" LexPushInOff XMLTagContent ">" LexSetXMLContent XMLElementContentOpt "" LexPopIn ; XMLTagContent @@ -1768,7 +1770,7 @@ XMLElementContentOpt /* }}} */ /* 11.1.5 XMLList Initialiser {{{ */ XMLListInitialiser - : "<>" LexPushInOff LexPushXMLContent XMLElementContent LexPop LexPopIn "" { $$ = CYNew CYXMLList($4); } + : "<>" LexPushInOff LexPushXMLContent XMLElementContent LexPop "" LexPopIn { $$ = CYNew CYXMLList($4); } ; /* }}} */ @@ -1816,12 +1818,12 @@ ComprehensionListOpt ; PrimaryExpression - : "[" LexPushInOff AssignmentExpression ComprehensionList LexPopIn "]" { $$ = CYNew CYArrayComprehension($3, $4); } + : "[" LexPushInOff AssignmentExpression ComprehensionList "]" LexPopIn { $$ = CYNew CYArrayComprehension($3, $4); } ; /* }}} */ /* JavaScript 1.7: for each {{{ */ IterationStatement - : "for" "each" "(" LexPushInOn ForInStatementInitialiser LexPopIn "!in" Expression ")" Statement { $$ = CYNew CYForOf($5, $8, $10); } + : "for" "each" "(" LexPushInOn ForInStatementInitialiser "!in" LexPopIn Expression ")" Statement { $$ = CYNew CYForOf($5, $8, $10); } ; /* }}} */ /* JavaScript 1.7: let Statements {{{ */ @@ -1860,7 +1862,7 @@ RubyProcExpression ; PrimaryExpression - : "{" LexPushInOff RubyProcParameters StatementListOpt LexPopIn "}" { $$ = CYNew CYRubyProc($3, $4); } + : "{" LexPushInOff RubyProcParameters StatementListOpt "}" LexPopIn { $$ = CYNew CYRubyProc($3, $4); } ; CallExpression