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:39 UTC

[21/33] git commit: [flex-falcon] [refs/heads/develop] - source maps for member access and dynamic access

source maps for member access and dynamic access


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

Branch: refs/heads/develop
Commit: f31918b08b8bf0e5b9e79ab19fb22519a2a64624
Parents: 9138c3d
Author: Josh Tynjala <jo...@apache.org>
Authored: Fri Apr 1 10:32:07 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
Committed: Fri Apr 1 10:32:07 2016 -0700

----------------------------------------------------------------------
 .../js/sourcemaps/TestSourceMapExpressions.java | 44 ++++++++++++++++++++
 .../compiler/internal/codegen/js/JSEmitter.java | 21 ++++++++++
 .../codegen/js/jx/MemberAccessEmitter.java      |  4 ++
 3 files changed, 69 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f31918b0/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
index 0d282f8..c34f68a 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapExpressions.java
@@ -6,8 +6,10 @@ import org.apache.flex.compiler.internal.test.SourceMapTestBase;
 import org.apache.flex.compiler.internal.tree.as.ArrayLiteralNode;
 import org.apache.flex.compiler.internal.tree.as.ObjectLiteralNode;
 import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IDynamicAccessNode;
 import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.tree.as.IIterationFlowNode;
+import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IReturnNode;
 import org.apache.flex.compiler.tree.as.ITernaryOperatorNode;
 import org.apache.flex.compiler.tree.as.IUnaryOperatorNode;
@@ -385,6 +387,28 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     //----------------------------------
 
     @Test
+    public void testVisitDynamicAccessNode_1()
+    {
+        IDynamicAccessNode node = getDynamicAccessNode("a[b]");
+        asBlockWalker.visitDynamicAccess(node);
+        assertMapping(node, 0, 1, 0, 1, 0, 2);
+        assertMapping(node, 0, 3, 0, 3, 0, 4);
+    }
+
+    @Test
+    public void testVisitDynamicAccessNode_2()
+    {
+        IDynamicAccessNode node = getDynamicAccessNode("a[b[c][d]]");
+        asBlockWalker.visitDynamicAccess(node);
+        assertMapping(node, 0, 1, 0, 1, 0, 2);
+        assertMapping(node, 0, 3, 0, 3, 0, 4);
+        assertMapping(node, 0, 5, 0, 5, 0, 6);
+        assertMapping(node, 0, 6, 0, 6, 0, 7);
+        assertMapping(node, 0, 8, 0, 8, 0, 9);
+        assertMapping(node, 0, 9, 0, 9, 0, 10);
+    }
+
+    @Test
     public void testVisitBinaryOperatorNode_Comma()
     {
         IBinaryOperatorNode node = getBinaryNode("a, b");
@@ -411,6 +435,26 @@ public class TestSourceMapExpressions extends SourceMapTestBase
     }
 
     @Test
+    public void testVisitMemberAccess_1()
+    {
+        IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getExpressionNode(
+                "a.b", IMemberAccessExpressionNode.class);
+        asBlockWalker.visitMemberAccessExpression(node);
+        assertMapping(node, 0, 1, 0, 1, 0, 2);
+    }
+
+    @Test
+    public void testVisitMemberAccess_2()
+    {
+        IMemberAccessExpressionNode node = (IMemberAccessExpressionNode) getExpressionNode(
+                "a.b.c.d", IMemberAccessExpressionNode.class);
+        asBlockWalker.visitMemberAccessExpression(node);
+        assertMapping(node, 0, 1, 0, 1, 0, 2);
+        assertMapping(node, 0, 3, 0, 3, 0, 4);
+        assertMapping(node, 0, 5, 0, 5, 0, 6);
+    }
+
+    @Test
     public void testVisitBinaryOperator_In()
     {
         IBinaryOperatorNode node = getBinaryNode("a in b");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f31918b0/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index e42056c..01a3298 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -39,6 +39,7 @@ import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IConditionalNode;
 import org.apache.flex.compiler.tree.as.IContainerNode;
 import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IDynamicAccessNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
@@ -300,6 +301,26 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
     }
 
     @Override
+    public void emitDynamicAccess(IDynamicAccessNode node)
+    {
+        IExpressionNode leftOperandNode = node.getLeftOperandNode();
+        getWalker().walk(leftOperandNode);
+        
+        startMapping(node, leftOperandNode.getLine(),
+                leftOperandNode.getColumn() + leftOperandNode.getEnd() - leftOperandNode.getStart());
+        write(ASEmitterTokens.SQUARE_OPEN);
+        endMapping(node);
+        
+        IExpressionNode rightOperandNode = node.getRightOperandNode();
+        getWalker().walk(rightOperandNode);
+
+        startMapping(node, rightOperandNode.getLine(),
+                rightOperandNode.getColumn() + rightOperandNode.getEnd() - rightOperandNode.getStart());
+        write(ASEmitterTokens.SQUARE_CLOSE);
+        endMapping(node);
+    }
+
+    @Override
     public void emitMemberKeyword(IDefinitionNode node)
     {
         IKeywordNode keywordNode = null;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f31918b0/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index 5175a79..4d9b11a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -245,7 +245,11 @@ public class MemberAccessEmitter extends JSSubEmitter implements
         	
         	continueWalk = writeLeftSide(node, leftNode, rightNode);
             if (continueWalk)
+            {
+                getEmitter().startMapping(node, node.getLeftOperandNode().getAbsoluteEnd() - node.getAbsoluteStart());
                 write(node.getOperator().getOperatorText());
+                getEmitter().endMapping(node);
+            }
         }
 
         if (continueWalk)