From: Jay Freeman (saurik) Date: Sat, 19 Dec 2015 09:20:33 +0000 (-0800) Subject: Move uses of super/return stack next to Lex rules. X-Git-Tag: v0.9.590~176 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/57efef5ffbec97896a112ca5439cde154e025ff4?ds=sidebyside Move uses of super/return stack next to Lex rules. --- diff --git a/Parser.ypp.in b/Parser.ypp.in index b5140d6..7e0dc2f 100644 --- a/Parser.ypp.in +++ b/Parser.ypp.in @@ -719,10 +719,12 @@ LexPopIn: { driver.in_.pop(); }; LexPushReturnOn: { driver.return_.push(true); }; LexPopReturn: { driver.return_.pop(); }; +Return: "return"[return] { if (!driver.return_.top()) CYERR(@return, "invalid return"); }; LexPushSuperOn: { driver.super_.push(true); }; LexPushSuperOff: { driver.super_.push(false); }; LexPopSuper: { driver.super_.pop(); }; +Super: "super"[super] { if (!driver.super_.top()) CYERR(@super, "invalid super"); }; LexPushYieldOn: { driver.yield_.push(true); }; LexPushYieldOff: { driver.yield_.push(false); }; @@ -1100,8 +1102,8 @@ MemberExpression ; SuperProperty - : "super"[super] { if (!driver.super_.top()) CYERR(@super, "invalid super"); } "[" Expression[property] "]" { $$ = CYNew CYSuperAccess($property); } - | "super"[super] { if (!driver.super_.top()) CYERR(@super, "invalid super"); } "." IdentifierName[property] { $$ = CYNew CYSuperAccess(CYNew CYString($property)); } + : Super "[" Expression[property] "]" { $$ = CYNew CYSuperAccess($property); } + | Super "." IdentifierName[property] { $$ = CYNew CYSuperAccess(CYNew CYString($property)); } ; MetaProperty @@ -1129,7 +1131,7 @@ CallExpression ; SuperCall - : "super"[super] { if (!driver.super_.top()) CYERR(@super, "invalid super"); } Arguments[arguments] { $$ = CYNew CYSuperCall($arguments); } + : Super Arguments[arguments] { $$ = CYNew CYSuperCall($arguments); } ; Arguments @@ -1579,10 +1581,6 @@ BreakStatement ; /* }}} */ /* 13.10 The return Statement {{{ */ -Return - : "return"[return] { if (!driver.return_.top()) CYERR(@return, "invalid return"); } - ; - ReturnStatement : Return TerminatorSoft { $$ = CYNew CYReturn(NULL); } | Return NewLineNot Expression[value] Terminator { $$ = CYNew CYReturn($value); }