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)