X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/9a7c375c914abe95434bb5e4081e2cb2443cf1cd..bf45251b6ef1230ffdbd79319b9c4a60c5ae6913:/Cycript.yy.in diff --git a/Cycript.yy.in b/Cycript.yy.in index 6a4f179..e735597 100644 --- a/Cycript.yy.in +++ b/Cycript.yy.in @@ -333,6 +333,7 @@ int cylex(YYSTYPE *, cy::location *, void *); %type ArrowFunction %type ArrowParameters %type AssignmentExpression +%type Binding %type BindingIdentifier %type BitwiseANDExpression %type Block_ @@ -349,6 +350,8 @@ int cylex(YYSTYPE *, cy::location *, void *); %type CaseClause %type CaseClausesOpt %type CatchOpt +%type ComprehensionForList +%type ComprehensionForListOpt %type ComprehensionList %type ComprehensionListOpt %type ConditionalExpression @@ -449,9 +452,10 @@ int cylex(YYSTYPE *, cy::location *, void *); %type BoxableExpression %type CategoryStatement %type ClassExpression +%type ClassFieldListOpt +%type ClassFields %type ClassStatement %type ClassSuperOpt -%type ClassFieldList %type ClassMessageDeclaration %type ClassMessageDeclarationListOpt %type ClassName @@ -738,6 +742,22 @@ ElementListOpt | LexSetRegExp { $$ = NULL; } ; /* }}} */ +/* 11.1.4.2 Array Comprehension {{{ */ +PrimaryExpression + : "[" LexPushInOff AssignmentExpression ComprehensionForList LexPopIn "]" { $$ = CYNew CYArrayComprehension($3, $4); } + ; + +ComprehensionForList + : "for" Binding "in" Expression ComprehensionForListOpt { $$ = CYNew CYForInComprehension($2, $4, $5); } + | "for" Binding "of" Expression ComprehensionForListOpt { $$ = CYNew CYForOfComprehension($2, $4, $5); } + ; + +ComprehensionForListOpt + : ComprehensionForList { $$ = $1; } + | "if" Expression { $$ = CYNew CYIfComprehension($2); } + | { $$ = NULL; } + ; +/* }}} */ /* 11.1.5 Object Initialiser {{{ */ ObjectLiteral : BRACE LexPushInOff PropertyDefinitionListOpt LexPopIn "}" { $$ = CYNew CYObject($3); } @@ -1042,6 +1062,10 @@ BindingIdentifier : Identifier { $$ = $1; } ; +Binding + : BindingIdentifier + ; + // XXX: BindingPattern /* }}} */ /* 12.2.1 Let and Const Declarations {{{ */ @@ -1300,17 +1324,13 @@ ClassSuperOpt | { $$ = NULL; } ; -ClassField - : Expression Identifier ";" - ; - -ClassFieldList - : BRACE ClassFieldListOpt "}" { $$ = NULL; } +ClassFieldListOpt + : Expression Identifier ";" ClassFieldListOpt { $$ = CYNew CYField($1, $2, $4); } + | { $$ = NULL; } ; -ClassFieldListOpt - : ClassFieldListOpt ClassField - | +ClassFields + : BRACE ClassFieldListOpt "}" { $$ = $2; } ; MessageScope @@ -1378,11 +1398,11 @@ ClassProtocolListOpt ; ClassExpression - : "@implementation" LexPushInOff ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt LexPopIn "@end" { $$ = CYNew CYClassExpression($3, $4, $5, $6, $7); } + : "@implementation" LexPushInOff ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt LexPopIn "@end" { $$ = CYNew CYClassExpression($3, $4, $5, $6, $7); } ; ClassStatement - : ";@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassStatement($2, $3, $4, $5, $6); } + : ";@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFields ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassStatement($2, $3, $4, $5, $6); } ; CategoryName @@ -1689,8 +1709,8 @@ IfComprehension ; ForComprehension - : "for" "(" LexPushInOn Identifier LexPopIn "!in" Expression ")" { $$ = CYNew CYForInComprehension($4, $7); } - | "for" "each" "(" LexPushInOn Identifier LexPopIn "!in" Expression ")" { $$ = CYNew CYForOfComprehension($5, $8); } + : "for" "(" Identifier "in" Expression ")" { $$ = CYNew CYForInComprehension($3, $5); } + | "for" "each" "(" Identifier "in" Expression ")" { $$ = CYNew CYForOfComprehension($4, $6); } ; ComprehensionList