]> git.saurik.com Git - cycript.git/blobdiff - Replace.cpp
Remove empty expression statements from the output.
[cycript.git] / Replace.cpp
index d1f8ab5b11a9c53ee797832e9447c25d9562fdaa..f51d2234e2232f35b83cc79918715fc4ab82b823 100644 (file)
@@ -198,8 +198,8 @@ CYAssignment *CYDeclaration::Assignment(CYContext &context) {
     return initialiser_ == NULL ? NULL : $ CYAssign(variable, initialiser_);
 }
 
-CYExpression *CYDeclaration::ForEachIn(CYContext &context) {
-    return $V(identifier_);
+CYStatement *CYDeclaration::ForEachIn(CYContext &context, CYExpression *value) {
+    return $ CYVar($L1($L(identifier_, value)));
 }
 
 CYExpression *CYDeclaration::Replace(CYContext &context) {
@@ -240,7 +240,7 @@ CYStatement *CYEmpty::Collapse(CYContext &context) {
 }
 
 CYStatement *CYEmpty::Replace(CYContext &context) {
-    return this;
+    return NULL;
 }
 
 CYStatement *CYExpress::Collapse(CYContext &context) {
@@ -271,8 +271,8 @@ CYExpression *CYExpression::ClassName(CYContext &context, bool object) {
     return this;
 }
 
-CYExpression *CYExpression::ForEachIn(CYContext &context) {
-    return this;
+CYStatement *CYExpression::ForEachIn(CYContext &context, CYExpression *value) {
+    return $E($ CYAssign(this, value));
 }
 
 CYNumber *CYFalse::Number(CYContext &context) {
@@ -316,7 +316,7 @@ CYStatement *CYForEachIn::Replace(CYContext &context) {
 
     return $ CYLet($L2($L(cys, set_), $L(cyt)), $$->*
         $ CYForIn($V(cyt), $V(cys), $ CYBlock($$->*
-            $E($ CYAssign(initialiser_->ForEachIn(context), $M($V(cys), $V(cyt))))->*
+            initialiser_->ForEachIn(context, $M($V(cys), $V(cyt)))->*
             code_
         ))
     );
@@ -453,10 +453,7 @@ namespace cy {
 namespace Syntax {
 
 CYExpression *New::AddArgument(CYContext &context, CYExpression *value) {
-    CYArgument **argument(&arguments_);
-    while (*argument != NULL)
-        argument = &(*argument)->next_;
-    *argument = $ CYArgument(value);
+    CYSetLast(arguments_, $ CYArgument(value));
     return this;
 }
 
@@ -624,6 +621,9 @@ CYScope::CYScope(CYScopeType type, CYContext &context, CYStatement *&statements)
     context_.scope_ = this;
 }
 
+CYScope::~CYScope() {
+}
+
 void CYScope::Close() {
     context_.scope_ = parent_;
     Scope(context_, statements_);