]> git.saurik.com Git - cycript.git/commitdiff
Remove CYLetStatement and provide a stub of CYLet.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 7 Dec 2015 10:13:33 +0000 (02:13 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 7 Dec 2015 10:13:33 +0000 (02:13 -0800)
Output.cpp
Parser.ypp.in
Replace.cpp
Syntax.hpp

index ce8e00c28924aa2b37eb4d1811155014b3a5aa48..e43d038e8d64388a025a9d6b7d18e2b67d25a11d 100644 (file)
@@ -629,9 +629,10 @@ void CYTypeDefinition::Output(CYOutput &out, CYFlags flags) const {
     out << "typedef" << ' ' << *typed_;
 }
 
-void CYLetStatement::Output(CYOutput &out, CYFlags flags) const {
-    out << "let" << ' ' << '(' << *declarations_ << ')';
-    code_->Single(out, CYRight(flags), CYCompactShort);
+void CYLet::Output(CYOutput &out, CYFlags flags) const {
+    out << "let" << ' ';
+    declarations_->Output(out, flags); // XXX: flags
+    out << ';';
 }
 
 void CYModule::Output(CYOutput &out) const {
@@ -918,7 +919,7 @@ void CYTypeVoid::Output(CYOutput &out) const {
 
 void CYVar::Output(CYOutput &out, CYFlags flags) const {
     out << "var" << ' ';
-    declarations_->Output(out, flags);
+    declarations_->Output(out, flags); // XXX: flags
     out << ';';
 }
 
index 6028184ecc46b3b00df36b9e72028c36abe94719..92e6424311df0523d0cb96749e301891fb92f9db 100644 (file)
@@ -487,7 +487,6 @@ _finline int yylex(cy::parser::semantic_type *semantic, CYLocation *location, CY
 %type <statement_> LabelledItem
 %type <statement_> LabelledStatement
 %type <expression_> LeftHandSideExpression
-%type <statement_> LetStatement
 %type <declaration_> LexicalBinding
 %type <statement_> LexicalDeclaration
 %type <literal_> Literal
@@ -1268,7 +1267,7 @@ StatementListItem
 /* }}} */
 /* 13.3 Let and Const Declarations {{{ */
 LexicalDeclaration
-    : LetOrConst BindingList Terminator { $$ = CYNew CYVar($2); }
+    : LetOrConst BindingList Terminator { $$ = CYNew CYLet($2); }
     ;
 
 LetOrConst
@@ -2284,15 +2283,6 @@ IterationStatement
     : "for" "each" "(" LexPushInOn ForInStatementInitializer "!in" LexPopIn Expression ")" Statement { $$ = CYNew CYForOf($5, $8, $10); }
     ;
 /* }}} */
-/* JavaScript FTL: let Statements {{{ */
-LetStatement
-    : "let" "(" VariableDeclarationList ")" Statement { $$ = CYNew CYLetStatement($3, $5); }
-    ;
-
-Statement__
-    : LetStatement
-    ;
-/* }}} */
 
 /* JavaScript FTW: Array Comprehensions {{{ */
 PrimaryExpression
index ef481e6252d46757d85be9c81f35d1e1c3040818..ac673adefd204c04966a66d0a51f0f93b01cce0e 100644 (file)
@@ -457,14 +457,14 @@ CYStatement *CYForOf::Replace(CYContext &context) {
             this
         );
 
-    CYIdentifier *cys($I("$cys")), *cyt($I("$cyt"));
+    CYIdentifier *cys(context.Unique()), *cyt(context.Unique());
 
-    return $ CYLetStatement($L2($ CYDeclaration(cys, set_), $ CYDeclaration(cyt)), $$->*
-        $ CYForIn($V(cyt), $V(cys), $ CYBlock($$->*
-            initialiser_->ForEachIn(context, $M($V(cys), $V(cyt)))->*
-            code_
-        ))
-    );
+    return $ CYBlock($$
+        ->* $ CYLet($L2($L(cys, set_), $L(cyt)))
+        ->* $ CYForIn($V(cyt), $V(cys), $ CYBlock($$
+            ->* initialiser_->ForEachIn(context, $M($V(cys), $V(cyt)))
+            ->* code_
+    )));
 }
 
 CYFunctionParameter *CYForOfComprehension::Parameter(CYContext &context) const {
@@ -618,8 +618,11 @@ CYExpression *CYLambda::Replace(CYContext &context) {
     return $N2($V("Functor"), $ CYFunctionExpression(NULL, parameters_->Parameters(context), code_), parameters_->TypeSignature(context, typed_->Replace(context)));
 }
 
-CYStatement *CYLetStatement::Replace(CYContext &context) {
-    return $E($ CYCall(CYNonLocalize(context, $ CYFunctionExpression(NULL, declarations_->Parameter(context), code_)), declarations_->Argument(context)));
+CYStatement *CYLet::Replace(CYContext &context) {
+    declarations_->Replace(context);
+    if (CYExpression *expression = declarations_->Expression(context))
+        return $E(expression);
+    return $ CYEmpty();
 }
 
 CYFunctionExpression *CYMethod::Constructor() {
index d278729c38beb598bce6b3a93ea17a5a6c1e4395..5e792b79ebe7a22499e4da9ac091fdae9b272faf 100644 (file)
@@ -1191,19 +1191,17 @@ struct CYVar :
     virtual void Output(CYOutput &out, CYFlags flags) const;
 };
 
-struct CYLetStatement :
+struct CYLet :
     CYStatement
 {
     CYDeclarations *declarations_;
-    CYStatement *code_;
 
-    CYLetStatement(CYDeclarations *declarations, CYStatement *code) :
-        declarations_(declarations),
-        code_(code)
+    CYLet(CYDeclarations *declarations) :
+        declarations_(declarations)
     {
     }
 
-    CYCompact(Long)
+    CYCompact(None)
 
     virtual CYStatement *Replace(CYContext &context);
     virtual void Output(CYOutput &out, CYFlags flags) const;