]> git.saurik.com Git - cycript.git/blobdiff - Replace.cpp
Support Infinity (syntax highlighting and output).
[cycript.git] / Replace.cpp
index d1bc1e9c9d537b1f9fe56f42bf9a93f9dbeb22e7..337e00ed8ceeb2d069b50081f5e78d3d2cad66a5 100644 (file)
@@ -109,10 +109,10 @@ CYTarget *CYArray::Replace(CYContext &context) {
 CYTarget *CYArrayComprehension::Replace(CYContext &context) {
     CYVariable *cyv($V("$cyv"));
 
-    return $C0($F(NULL, $P1($L($I("$cyv")), comprehensions_->Parameters(context)), $$->*
-        $E($ CYAssign(cyv, $ CYArray()))->*
-        comprehensions_->Replace(context, $E($C1($M(cyv, $S("push")), expression_)))->*
-        $ CYReturn(cyv)
+    return $C0($F(NULL, $P1($L($I("$cyv")), comprehensions_->Parameters(context)), $$
+        ->* $E($ CYAssign(cyv, $ CYArray()))
+        ->* comprehensions_->Replace(context, $E($C1($M(cyv, $S("push")), expression_)))
+        ->* $ CYReturn(cyv)
     ));
 }
 
@@ -268,17 +268,17 @@ void CYContext::NonLocal(CYStatement *&statements) {
             $ CYVar($L1($L(unique, $ CYObject()))));
 
         cy::Syntax::Catch *rescue(
-            $ cy::Syntax::Catch(cye, $$->*
-                $ CYIf($ CYIdentical($M($V(cye), $S("$cyk")), $V(unique)), $$->*
-                    $ CYReturn($M($V(cye), $S("$cyv"))))->*
-                $ cy::Syntax::Throw($V(cye))));
+            $ cy::Syntax::Catch(cye, $$
+                ->* $ CYIf($ CYIdentical($M($V(cye), $S("$cyk")), $V(unique)), $$
+                    ->* $ CYReturn($M($V(cye), $S("$cyv"))))
+                ->* $ cy::Syntax::Throw($V(cye))));
 
         context.Replace(declare);
         rescue->Replace(context);
 
-        statements = $$->*
-            declare->*
-            $ cy::Syntax::Try(statements, rescue, NULL);
+        statements = $$
+            ->* declare
+            ->* $ cy::Syntax::Try(statements, rescue, NULL);
     }
 }
 
@@ -351,7 +351,7 @@ void CYElementValue::Replace(CYContext &context) {
         next_->Replace(context);
 }
 
-CYStatement *CYEmpty::Replace(CYContext &context) {
+CYForInitializer *CYEmpty::Replace(CYContext &context) {
     return NULL;
 }
 
@@ -370,7 +370,7 @@ CYStatement *CYExpress::Return() {
     return $ CYReturn(expression_);
 }
 
-CYStatement *CYExpress::Replace(CYContext &context) {
+CYForInitializer *CYExpress::Replace(CYContext &context) {
     context.Replace(expression_);
     return this;
 }
@@ -425,10 +425,6 @@ CYStatement *CYFor::Replace(CYContext &context) {
     return this;
 }
 
-CYExpression *CYForDeclarations::Replace(CYContext &context) {
-    return declarations_->Replace(context, CYIdentifierVariable);
-}
-
 CYStatement *CYForLexical::Initialize(CYContext &context, CYExpression *value) {
     if (value == NULL) {
         if (declaration_->initialiser_ == NULL)
@@ -453,6 +449,13 @@ CYStatement *CYForIn::Replace(CYContext &context) {
     return this;
 }
 
+CYStatement *CYForInitialized::Replace(CYContext &context) {
+    CYAssignment *assignment(declaration_->Replace(context, CYIdentifierVariable));
+    return $ CYBlock($$
+        ->* (assignment == NULL ? NULL : $ CYExpress(assignment))
+        ->* $ CYForIn(declaration_->Target(context), set_, code_));
+}
+
 CYFunctionParameter *CYForInComprehension::Parameter(CYContext &context) const {
     return $ CYFunctionParameter(declaration_);
 }
@@ -480,11 +483,11 @@ CYFunctionParameter *CYForOfComprehension::Parameter(CYContext &context) const {
 CYStatement *CYForOfComprehension::Replace(CYContext &context, CYStatement *statement) const {
     CYIdentifier *cys($I("$cys"));
 
-    return $E($C0($F(NULL, $P1($L($I("$cys"))), $$->*
-        $E($ CYAssign($V(cys), set_))->*
-        $ CYForIn(declaration_->Target(context), $V(cys), $ CYBlock($$->*
-            $E($ CYAssign(declaration_->Target(context), $M($V(cys), declaration_->Target(context))))->*
-            CYComprehension::Replace(context, statement)
+    return $E($C0($F(NULL, $P1($L($I("$cys"))), $$
+        ->* $E($ CYAssign($V(cys), set_))
+        ->* $ CYForIn(declaration_->Target(context), $V(cys), $ CYBlock($$
+            ->* $E($ CYAssign(declaration_->Target(context), $M($V(cys), declaration_->Target(context))))
+            ->* CYComprehension::Replace(context, statement)
         ))
     )));
 }
@@ -541,9 +544,8 @@ void CYFunction::Replace(CYContext &context) {
     if (CYIdentifier *identifier = this_.identifier_) {
         context.scope_->Declare(context, identifier, CYIdentifierVariable);
         code_ = $$
-            ->*$E($ CYAssign($V(identifier), $ CYThis()))
-            ->*code_
-        ;
+            ->* $E($ CYAssign($V(identifier), $ CYThis()))
+            ->* code_;
     }
 
     if (localize)
@@ -574,11 +576,10 @@ void CYFunctionParameter::Replace(CYContext &context, CYStatement *&statements)
     next_->Replace(context, statements);
 
     if (assignment != NULL)
-        statements = $$->*
-            $ CYIf($ CYIdentical($ CYTypeOf(initialiser_->Target(context)), $S("undefined")), $$->*
-                $E(assignment)
-            )->*
-            statements;
+        statements = $$
+            ->* $ CYIf($ CYIdentical($ CYTypeOf(initialiser_->Target(context)), $S("undefined")), $$
+                ->* $E(assignment))
+            ->* statements;
 }
 
 CYStatement *CYFunctionStatement::Replace(CYContext &context) {
@@ -644,7 +645,7 @@ CYTarget *CYLambda::Replace(CYContext &context) {
     return $N2($V("Functor"), $ CYFunctionExpression(NULL, parameters_->Parameters(context), code_), parameters_->TypeSignature(context, typed_->Replace(context)));
 }
 
-CYStatement *CYLet::Replace(CYContext &context) {
+CYForInitializer *CYLet::Replace(CYContext &context) {
     if (CYExpression *expression = declarations_->Replace(context, CYIdentifierLexical))
         return $E(expression);
     return $ CYEmpty();
@@ -718,8 +719,8 @@ CYTarget *CYObject::Replace(CYContext &context) {
 
     if (builder) {
         return $C1($M($ CYFunctionExpression(NULL, builder.declarations_->Parameter(context),
-            builder.statements_->*
-                $ CYReturn($ CYThis())
+            builder.statements_
+                ->* $ CYReturn($ CYThis())
         ), $S("call")), this, builder.declarations_->Argument(context));
     }
 
@@ -757,7 +758,8 @@ void CYProperty::Replace(CYContext &context, CYBuilder &builder, CYExpression *s
     CYExpression *name(name_->PropertyName(context));
     if (name_->Computed()) {
         CYIdentifier *unique(context.Unique());
-        builder.declarations_->*$L1($L(unique, name));
+        builder.declarations_
+            ->* $L1($L(unique, name));
         name = $V(unique);
     }
 
@@ -949,7 +951,8 @@ void CYScope::Close(CYContext &context, CYStatement *&statements) {
 
     CYForEach (i, internal_)
         if (i->kind_ == CYIdentifierVariable)
-            declarations ->* $ CYDeclarations($ CYDeclaration(i->identifier_));
+            declarations
+                ->* $ CYDeclarations($ CYDeclaration(i->identifier_));
 
     if (declarations) {
         CYVar *var($ CYVar(declarations));
@@ -1224,7 +1227,7 @@ CYExpression *CYTypedParameter::TypeSignature(CYContext &context, CYExpression *
     return next_->TypeSignature(context, $ CYAdd(prefix, typed_->Replace(context)));
 }
 
-CYStatement *CYVar::Replace(CYContext &context) {
+CYForInitializer *CYVar::Replace(CYContext &context) {
     if (CYExpression *expression = declarations_->Replace(context, CYIdentifierVariable))
         return $E(expression);
     return $ CYEmpty();