X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/56e02e5b879e679302c8d9a20654b8a193791a3a..ea5e845aafc7e8525b78c553a1dfd1761de49253:/Cycript.yy.in
diff --git a/Cycript.yy.in b/Cycript.yy.in
index d049537..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
@@ -481,6 +481,7 @@ int cylex(YYSTYPE *, cy::location *, void *);
%type MessageScope
%type ModifiedType
%type PrefixedType
+%type PrimitiveType
%type QualifiedType
%type SelectorCall_
%type SelectorCall
@@ -556,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
@@ -722,7 +725,7 @@ TerminatorOpt
/* 11.1 Primary Expressions {{{ */
Parenthetical
- : "(" LexPushInOff Expression LexPopIn ")" { $$ = $3; }
+ : "(" LexPushInOff Expression ")" LexPopIn { $$ = $3; }
;
ParentheticalOpt
@@ -747,7 +750,7 @@ PrimaryExpression
/* }}} */
/* 11.1.4.1 Array Initialiser {{{ */
ArrayLiteral
- : "[" LexPushInOff ElementListOpt LexPopIn "]" { $$ = CYNew CYArray($3); }
+ : "[" LexPushInOff ElementListOpt "]" LexPopIn { $$ = CYNew CYArray($3); }
;
Element
@@ -771,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
@@ -787,12 +790,12 @@ ComprehensionForListOpt
/* }}} */
/* 11.1.5 Object Initialiser {{{ */
ObjectLiteral
- : BRACE LexPushInOff PropertyDefinitionListOpt LexPopIn "}" { $$ = CYNew CYObject($3); }
+ : BRACE LexPushInOff PropertyDefinitionListOpt "}" LexPopIn { $$ = CYNew CYObject($3); }
;
PropertyDefinitionList_
: "," PropertyDefinitionList { $$ = $2; }
- | "," { $$ = NULL; }
+ | "," LexSetRegExp { $$ = NULL; }
| { $$ = NULL; }
;
@@ -802,7 +805,7 @@ PropertyDefinitionList
PropertyDefinitionListOpt
: PropertyDefinitionList { $$ = $1; }
- | { $$ = NULL; }
+ | LexSetRegExp { $$ = NULL; }
;
PropertyDefinition
@@ -825,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; }
;
@@ -857,7 +860,7 @@ CallExpression
;
Arguments
- : "(" LexPushInOff ArgumentListOpt LexPopIn ")" { $$ = $3; }
+ : "(" LexPushInOff ArgumentListOpt ")" LexPopIn { $$ = $3; }
;
ArgumentList_
@@ -979,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 {{{ */
@@ -1178,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
@@ -1188,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
@@ -1212,7 +1215,7 @@ BreakStatement
/* }}} */
/* 12.9 The return Statement {{{ */
ReturnStatement
- : "return" "\n" StrictSemi { $$ = CYNew CYReturn(NULL); }
+ : "return" LexSetRegExp "\n" StrictSemi { $$ = CYNew CYReturn(NULL); }
| "return" ExpressionOpt Terminator { $$ = CYNew CYReturn($2); }
;
/* }}} */
@@ -1252,7 +1255,7 @@ LabelledStatement
/* }}} */
/* 12.13 The throw Statement {{{ */
ThrowStatement
- : "throw" "\n" StrictSemi { YYABORT; }
+ : "throw" LexSetRegExp "\n" StrictSemi { YYABORT; }
| "throw" Expression Terminator { $$ = CYNew cy::Syntax::Throw($2); }
;
/* }}} */
@@ -1283,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_
@@ -1325,7 +1328,7 @@ ArrowParameters
ConciseBody
: AssignmentExpression { $$ = CYNew CYReturn($1); }
- | ";{" LexPushInOff FunctionBody LexPopIn "}" { $$ = $3; }
+ | LexSetRegExp ";{" LexPushInOff FunctionBody "}" LexPopIn { $$ = $4; }
;
/* }}} */
/* 14 Program {{{ */
@@ -1347,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
@@ -1357,8 +1360,13 @@ PrefixedType
| "*" PrefixedType { CYSetLast($2->type_) = CYNew CYTypePointerTo(); $$ = $2; }
;
+PrimitiveType
+ : Variable { $$ = $1; }
+ | "void" { $$ = CYNew cy::Syntax::New(CYNew CYVariable(CYNew CYIdentifier("Type")), CYNew CYArgument(CYNew CYString("v"))); }
+ ;
+
QualifiedType
- : Variable { $$ = CYNew CYTypeVariable($1); }
+ : PrimitiveType { $$ = CYNew CYTypeVariable($1); }
| "const" QualifiedType { $$ = CYNew CYTypeConstant($2); }
;
@@ -1389,7 +1397,7 @@ ClassSuperOpt
ClassFieldListOpt
: Expression Identifier ";" ClassFieldListOpt { $$ = CYNew CYField($1, $2, $4); }
- | { $$ = NULL; }
+ | LexSetRegExp { $$ = NULL; }
;
ClassFields
@@ -1403,7 +1411,6 @@ MessageScope
TypeOpt
: "(" LexSetRegExp EncodedType ")" { $$ = $3; }
- | "(" LexSetRegExp "void" ")" { $$ = CYNew CYString("v"); }
| { $$ = NULL; }
;
@@ -1461,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
@@ -1511,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_
@@ -1531,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 {{{ */
@@ -1582,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
@@ -1683,7 +1690,7 @@ AttributeIdentifier
PropertySelector_
: PropertySelector { $$ = $1; }
- | "[" LexPushInOff Expression LexPopIn "]" { $$ = CYNew CYSelector($3); }
+ | "[" LexPushInOff Expression "]" LexPopIn { $$ = CYNew CYSelector($3); }
;
PropertySelector
@@ -1713,8 +1720,8 @@ XMLInitialiser
;
XMLElement
- : "<" LexPushInOff XMLTagContent LexPop LexPopIn "/>"
- | "<" LexPushInOff XMLTagContent ">" LexSetXMLContent XMLElementContentOpt "" LexSetXMLTag XMLTagName XMLWhitespaceOpt LexPop LexPopIn ">"
+ : "<" LexPushInOff XMLTagContent LexPop "/>" LexPopIn
+ | "<" LexPushInOff XMLTagContent ">" LexSetXMLContent XMLElementContentOpt "" LexSetXMLTag XMLTagName XMLWhitespaceOpt LexPop ">" LexPopIn
;
XMLTagContent
@@ -1763,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); }
;
/* }}} */
@@ -1811,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 {{{ */
@@ -1855,7 +1862,7 @@ RubyProcExpression
;
PrimaryExpression
- : "{" LexPushInOff RubyProcParameters StatementListOpt LexPopIn "}" { $$ = CYNew CYRubyProc($3, $4); }
+ : "{" LexPushInOff RubyProcParameters StatementListOpt "}" LexPopIn { $$ = CYNew CYRubyProc($3, $4); }
;
CallExpression