You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2016/04/06 01:56:25 UTC

[07/33] git commit: [flex-falcon] [refs/heads/develop] - ASEmitter: broke up some of the code for if/else if/else and operators into separate functions to make them easier to override

ASEmitter: broke up some of the code for if/else if/else and operators into separate functions to make them easier to override


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/5e8e9cb5
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/5e8e9cb5
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/5e8e9cb5

Branch: refs/heads/develop
Commit: 5e8e9cb537957ba918484b3289b462c3e455334b
Parents: 109b56b
Author: Josh Tynjala <jo...@apache.org>
Authored: Tue Mar 29 15:22:02 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
Committed: Tue Mar 29 15:22:02 2016 -0700

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java | 124 ++++++++++++-------
 1 file changed, 78 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/5e8e9cb5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 47f633b..0a0daa3 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -878,19 +878,8 @@ public class ASEmitter implements IASEmitter, IEmitter
     public void emitIf(IIfNode node)
     {
         IConditionalNode conditional = (IConditionalNode) node.getChild(0);
+        emitConditional(conditional, false);
 
-        IContainerNode xnode = (IContainerNode) conditional
-                .getStatementContentsNode();
-
-        writeToken(ASEmitterTokens.IF);
-        //write(SPACE);
-        write(ASEmitterTokens.PAREN_OPEN);
-        getWalker().walk(conditional.getChild(0)); // conditional expression
-        write(ASEmitterTokens.PAREN_CLOSE);
-        if (!isImplicit(xnode))
-            write(ASEmitterTokens.SPACE);
-
-        getWalker().walk(conditional.getChild(1)); // BlockNode
         IConditionalNode[] nodes = node.getElseIfNodes();
         if (nodes.length > 0)
         {
@@ -906,34 +895,49 @@ public class ASEmitter implements IASEmitter, IEmitter
                 else
                     write(ASEmitterTokens.SPACE);
 
-                writeToken(ASEmitterTokens.ELSE);
-                writeToken(ASEmitterTokens.IF);
-                write(ASEmitterTokens.PAREN_OPEN);
-                getWalker().walk(enode.getChild(0));
-                write(ASEmitterTokens.PAREN_CLOSE);
-                if (!isImplicit)
-                    write(ASEmitterTokens.SPACE);
-
-                getWalker().walk(enode.getChild(1)); // ConditionalNode
+                emitConditional(enode, true);
             }
         }
 
         ITerminalNode elseNode = node.getElseNode();
         if (elseNode != null)
         {
-            IContainerNode cnode = (IContainerNode) elseNode.getChild(0);
-            // if an implicit if, add a newline with no space
-            final boolean isImplicit = isImplicit(cnode);
-            if (isImplicit)
-                writeNewline();
-            else
-                write(ASEmitterTokens.SPACE);
-            write(ASEmitterTokens.ELSE);
-            if (!isImplicit)
-                write(ASEmitterTokens.SPACE);
+            emitElse(elseNode);
+        }
+    }
 
-            getWalker().walk(elseNode); // TerminalNode
+    public void emitConditional(IConditionalNode node, boolean isElseIf)
+    {
+        IContainerNode xnode = (IContainerNode) node.getStatementContentsNode();
+
+        if (isElseIf)
+        {
+            writeToken(ASEmitterTokens.ELSE);
         }
+        writeToken(ASEmitterTokens.IF);
+        write(ASEmitterTokens.PAREN_OPEN);
+        getWalker().walk(node.getChild(0)); // conditional expression
+        write(ASEmitterTokens.PAREN_CLOSE);
+        if (!isImplicit(xnode))
+            write(ASEmitterTokens.SPACE);
+
+        getWalker().walk(node.getChild(1)); // BlockNode
+    }
+    
+    public void emitElse(ITerminalNode node)
+    {
+        IContainerNode cnode = (IContainerNode) node.getChild(0);
+        // if an implicit if, add a newline with no space
+        final boolean isImplicit = isImplicit(cnode);
+        if (isImplicit)
+            writeNewline();
+        else
+            write(ASEmitterTokens.SPACE);
+        write(ASEmitterTokens.ELSE);
+        if (!isImplicit)
+            write(ASEmitterTokens.SPACE);
+
+        getWalker().walk(node); // TerminalNode
     }
 
     @Override
@@ -1447,35 +1451,63 @@ public class ASEmitter implements IASEmitter, IEmitter
                 || node.getNodeID() == ASTNodeID.Op_SubtractID
                 || node.getNodeID() == ASTNodeID.Op_AddID)
         {
-            write(node.getOperator().getOperatorText());
-            IExpressionNode opNode = node.getOperandNode();
-            getWalker().walk(opNode);
+            emitPreUnaryOperator(node);
         }
-
         else if (node.getNodeID() == ASTNodeID.Op_PostIncrID
                 || node.getNodeID() == ASTNodeID.Op_PostDecrID)
         {
-            getWalker().walk(node.getOperandNode());
-            write(node.getOperator().getOperatorText());
+            emitPostUnaryOperator(node);
         }
-        else if (node.getNodeID() == ASTNodeID.Op_DeleteID
-                || node.getNodeID() == ASTNodeID.Op_VoidID)
+        else if (node.getNodeID() == ASTNodeID.Op_DeleteID)
         {
-            writeToken(node.getOperator().getOperatorText());
-            getWalker().walk(node.getOperandNode());
+            emitDeleteOperator(node);
+        }
+        else if (node.getNodeID() == ASTNodeID.Op_VoidID)
+        {
+            emitVoidOperator(node);
         }
         else if (node.getNodeID() == ASTNodeID.Op_TypeOfID)
         {
-            write(node.getOperator().getOperatorText());
-            write(ASEmitterTokens.PAREN_OPEN);
-            getWalker().walk(node.getOperandNode());
-            write(ASEmitterTokens.PAREN_CLOSE);
+            emitTypeOfOperator(node);
         }
 
         if (ASNodeUtils.hasParenClose(node))
             write(ASEmitterTokens.PAREN_CLOSE);
     }
 
+    public void emitPreUnaryOperator(IUnaryOperatorNode node)
+    {
+        write(node.getOperator().getOperatorText());
+        IExpressionNode opNode = node.getOperandNode();
+        getWalker().walk(opNode);
+    }
+
+    public void emitPostUnaryOperator(IUnaryOperatorNode node)
+    {
+        getWalker().walk(node.getOperandNode());
+        write(node.getOperator().getOperatorText());
+    }
+
+    public void emitDeleteOperator(IUnaryOperatorNode node)
+    {
+        writeToken(node.getOperator().getOperatorText());
+        getWalker().walk(node.getOperandNode());
+    }
+
+    public void emitVoidOperator(IUnaryOperatorNode node)
+    {
+        writeToken(node.getOperator().getOperatorText());
+        getWalker().walk(node.getOperandNode());
+    }
+    
+    public void emitTypeOfOperator(IUnaryOperatorNode node)
+    {
+        write(node.getOperator().getOperatorText());
+        write(ASEmitterTokens.PAREN_OPEN);
+        getWalker().walk(node.getOperandNode());
+        write(ASEmitterTokens.PAREN_CLOSE);
+    }
+
     @Override
     public void emitLanguageIdentifier(ILanguageIdentifierNode node)
     {