a mapping can't exist on multiple lines, so simply finish the starting line
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/c1999209 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/c1999209 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/c1999209 Branch: refs/heads/develop Commit: c1999209bd5ed1f98a6dce91cb7572a578bad4ba Parents: 739bef7 Author: Josh Tynjala <[email protected]> Authored: Fri Apr 1 18:02:38 2016 -0700 Committer: Josh Tynjala <[email protected]> Committed: Fri Apr 1 18:02:38 2016 -0700 ---------------------------------------------------------------------- .../js/sourcemaps/TestSourceMapExpressions.java | 16 ++++++ .../internal/test/SourceMapTestBase.java | 6 +- .../flex/compiler/codegen/js/IJSEmitter.java | 6 +- .../compiler/internal/codegen/js/JSEmitter.java | 60 +++++++------------- .../internal/codegen/js/jx/AsIsEmitter.java | 6 +- .../codegen/js/jx/BinaryOperatorEmitter.java | 6 +- .../codegen/js/jx/MemberAccessEmitter.java | 2 +- .../codegen/js/jx/VarDeclarationEmitter.java | 6 +- 8 files changed, 55 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/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 5a94d96..d2dd1dd 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 @@ -588,6 +588,22 @@ public class TestSourceMapExpressions extends SourceMapTestBase } @Test + public void testVisitArrayLiteral_4() + { + ArrayLiteralNode node = (ArrayLiteralNode) getExpressionNode( + "a = [0,\n123, 45]", ArrayLiteralNode.class); + asBlockWalker.visitLiteral(node); + //[0, 123, 45] + assertMapping(node, 0, 0, 0, 0, 0, 1); // [ + assertMapping(node, 0, 1, 0, 1, 0, 2); // 0 + assertMapping(node, 0, 2, 0, 2, 0, 4); // , + assertMapping(node, 1, 0, 0, 4, 0, 7); // 123 + assertMapping(node, 1, 3, 0, 7, 0, 9); // , + assertMapping(node, 1, 5, 0, 9, 0, 11); // 45 + //TODO: figure out how to place the ] + } + + @Test public void testVisitUnaryOperatorNode_Typeof() { IUnaryOperatorNode node = getUnaryNode("typeof(a)"); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/SourceMapTestBase.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/SourceMapTestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/SourceMapTestBase.java index a7b18cf..9843267 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/SourceMapTestBase.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/SourceMapTestBase.java @@ -24,7 +24,11 @@ public class SourceMapTestBase extends ASTestBase int outStartLine, int outStartColumn, int outEndLine, int outEndColumn) { int sourceStartLine = nodeStartLine + node.getLine(); - int sourceStartColumn = nodeStartColumn + node.getColumn(); + int sourceStartColumn = nodeStartColumn; + if (nodeStartLine == 0) + { + sourceStartColumn += node.getColumn(); + } boolean foundMapping = false; List<IJSEmitter.SourceMapMapping> mappings = jsEmitter.getSourceMapMappings(); for (IJSEmitter.SourceMapMapping mapping : mappings) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java index d42abe1..82cb7d7 100644 --- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java @@ -57,10 +57,10 @@ public interface IJSEmitter extends IASEmitter void startMapping(ISourceLocation node, int line, int column); /** - * Adds a node to the source map using the space between two nodes instead - * of the node's own line and column. + * Adds a node to the source map after a particular node instead using the + * node's own line and column. */ - void startMapping(ISourceLocation node, ISourceLocation previousNode, ISourceLocation nextNode); + void startMapping(ISourceLocation node, ISourceLocation nodeBeforeMapping); /** * Commits a mapping to the source map. http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/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 ba7cbdf..6839f9e 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 @@ -176,8 +176,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter //we're mapping the comma to the container, but we use the //parameter line/column in case the comma is not on the same //line as the opening ( - startMapping(node, parameterNode.getLine(), - parameterNode.getColumn() + parameterNode.getAbsoluteEnd() - parameterNode.getAbsoluteStart()); + startMapping(node, parameterNode); writeToken(ASEmitterTokens.COMMA); endMapping(node); } @@ -213,8 +212,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter //we're mapping the comma to the container, but we use the //parameter line/column in case the comma is not on the same //line as the opening ( - startMapping(node, argumentNode.getLine(), - argumentNode.getColumn() + argumentNode.getAbsoluteEnd() - argumentNode.getAbsoluteStart()); + startMapping(node, argumentNode); writeToken(ASEmitterTokens.COMMA); endMapping(node); } @@ -275,10 +273,10 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(child); if (i < len - 1) { - //we're mapping the comma to the literal container, but we use - //the child line/column in case the comma is not on the same - //line as the opening { or [ - startMapping(node, child.getLine(), child.getColumn() + child.getAbsoluteEnd() - child.getAbsoluteStart()); + //we're mapping the comma to the literal container, but we fill + //the space between the current child and the next because we + //don't know exactly where the comma appears in ActionScript + startMapping(node, child); writeToken(ASEmitterTokens.COMMA); endMapping(node); } @@ -308,11 +306,11 @@ public class JSEmitter extends ASEmitter implements IJSEmitter endMapping(nameNode); } - IExpressionNode valueNode = node.getValueNode(); - startMapping(sourceLocationNode, nameNode, valueNode); + startMapping(sourceLocationNode, nameNode); write(ASEmitterTokens.COLON); endMapping(sourceLocationNode); - + + IExpressionNode valueNode = node.getValueNode(); getWalker().walk(valueNode); } @@ -348,16 +346,14 @@ public class JSEmitter extends ASEmitter implements IJSEmitter IExpressionNode leftOperandNode = node.getLeftOperandNode(); getWalker().walk(leftOperandNode); - startMapping(node, leftOperandNode.getLine(), - leftOperandNode.getColumn() + leftOperandNode.getEnd() - leftOperandNode.getStart()); + startMapping(node, leftOperandNode); write(ASEmitterTokens.SQUARE_OPEN); endMapping(node); IExpressionNode rightOperandNode = node.getRightOperandNode(); getWalker().walk(rightOperandNode); - startMapping(node, rightOperandNode.getLine(), - rightOperandNode.getColumn() + rightOperandNode.getEnd() - rightOperandNode.getStart()); + startMapping(node, rightOperandNode); write(ASEmitterTokens.SQUARE_CLOSE); endMapping(node); } @@ -408,9 +404,9 @@ public class JSEmitter extends ASEmitter implements IJSEmitter IASNode conditionalExpression = node.getChild(0); getWalker().walk(conditionalExpression); - IContainerNode xnode = (IContainerNode) node.getStatementContentsNode(); - startMapping(node, conditionalExpression, xnode); + startMapping(node, conditionalExpression); write(ASEmitterTokens.PAREN_CLOSE); + IContainerNode xnode = (IContainerNode) node.getStatementContentsNode(); if (!isImplicit(xnode)) write(ASEmitterTokens.SPACE); endMapping(node); @@ -449,7 +445,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(conditionalNode); IExpressionNode leftOperandNode = node.getLeftOperandNode(); - startMapping(node, conditionalNode, leftOperandNode); + startMapping(node, conditionalNode); write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.TERNARY); endMapping(node); @@ -457,7 +453,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(leftOperandNode); IExpressionNode rightOperandNode = node.getRightOperandNode(); - startMapping(node, leftOperandNode, rightOperandNode); + startMapping(node, leftOperandNode); write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.COLON); endMapping(node); @@ -482,7 +478,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(conditionalExpression); IASNode statementContentsNode = node.getStatementContentsNode(); - startMapping(node, conditionalExpression, statementContentsNode); + startMapping(node, conditionalExpression); write(ASEmitterTokens.PAREN_CLOSE); if (!isImplicit(cnode)) write(ASEmitterTokens.SPACE); @@ -506,7 +502,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(statementContents); IASNode conditionalExpressionNode = node.getConditionalExpressionNode(); - startMapping(node, statementContents, conditionalExpressionNode); + startMapping(node, statementContents); if (!isImplicit(cnode)) write(ASEmitterTokens.SPACE); else @@ -518,7 +514,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(conditionalExpressionNode); - startMapping(node, conditionalExpressionNode, conditionalExpressionNode.getSucceedingNode(1)); + startMapping(node, conditionalExpressionNode); write(ASEmitterTokens.PAREN_CLOSE); write(ASEmitterTokens.SEMICOLON); endMapping(node); @@ -539,7 +535,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter { IExpressionNode operandNode = node.getOperandNode(); getWalker().walk(operandNode); - startMapping(node, operandNode.getLine(), operandNode.getColumn() + operandNode.getAbsoluteEnd() - operandNode.getAbsoluteStart()); + startMapping(node, operandNode); write(node.getOperator().getOperatorText()); endMapping(node); } @@ -638,21 +634,9 @@ public class JSEmitter extends ASEmitter implements IJSEmitter startMapping(node, node.getLine(), node.getColumn()); } - public void startMapping(ISourceLocation node, ISourceLocation previousNode, ISourceLocation nextNode) + public void startMapping(ISourceLocation node, ISourceLocation nodeBeforeMapping) { - if(previousNode.getLine() == nextNode.getLine()) - { - //start at the end of the previous node - startMapping(node, previousNode.getLine(), previousNode.getColumn() + previousNode.getAbsoluteEnd() - previousNode.getAbsoluteStart()); - } - else - { - //fill the rest of the line with the previous node - startMapping(node, previousNode.getLine(), previousNode.getColumn() + previousNode.getAbsoluteEnd() - previousNode.getAbsoluteStart()); - endMapping(node); - //fill the beginning of the line with the next node - startMapping(node, nextNode.getLine(), 0); - } + startMapping(node, nodeBeforeMapping.getLine(), nodeBeforeMapping.getColumn() + nodeBeforeMapping.getAbsoluteEnd() - nodeBeforeMapping.getAbsoluteStart()); } public void startMapping(ISourceLocation node, int line, int column) @@ -703,7 +687,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter { throw new IllegalStateException("Cannot end mapping when a mapping has not been started"); } - + lastMapping.destEndPosition = new FilePosition(getCurrentLine(), getCurrentColumn()); sourceMapMappings.add(lastMapping); lastMapping = null; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java index 18c2e05..36e2cd0 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java @@ -136,7 +136,7 @@ public class AsIsEmitter extends JSSubEmitter if (node instanceof IBinaryOperatorNode) { IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node; - getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode(), binaryOperatorNode.getRightOperandNode()); + getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode()); } else { @@ -157,7 +157,7 @@ public class AsIsEmitter extends JSSubEmitter if (node instanceof IBinaryOperatorNode) { IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node; - getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode(), binaryOperatorNode.getRightOperandNode()); + getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode()); } else { @@ -180,7 +180,7 @@ public class AsIsEmitter extends JSSubEmitter if (node instanceof IBinaryOperatorNode) { IBinaryOperatorNode binaryOperatorNode = (IBinaryOperatorNode) node; - getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode(), binaryOperatorNode.getRightOperandNode()); + getEmitter().startMapping(node, binaryOperatorNode.getLeftOperandNode()); } else { http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java index b056177..d97c20a 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java @@ -71,7 +71,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements { getWalker().walk(node.getLeftOperandNode()); - getEmitter().startMapping(node, node.getLeftOperandNode(), node.getRightOperandNode()); + getEmitter().startMapping(node, node.getLeftOperandNode()); write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.INSTANCEOF); getEmitter().endMapping(node); @@ -330,7 +330,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements { getWalker().walk(node.getLeftOperandNode()); - getEmitter().startMapping(node, node.getLeftOperandNode(), node.getRightOperandNode()); + getEmitter().startMapping(node, node.getLeftOperandNode()); if (id != ASTNodeID.Op_CommaID) write(ASEmitterTokens.SPACE); @@ -346,7 +346,7 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements getEmitter().endMapping(node); write(lnode.getName()); - getEmitter().startMapping(node, node.getLeftOperandNode(), node.getRightOperandNode()); + getEmitter().startMapping(node, node.getLeftOperandNode()); write(ASEmitterTokens.SPACE); write((id == ASTNodeID.Op_LogicalAndAssignID) ? ASEmitterTokens.LOGICAL_AND : ASEmitterTokens.LOGICAL_OR); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/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 e5f9a58..1756487 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 @@ -246,7 +246,7 @@ public class MemberAccessEmitter extends JSSubEmitter implements continueWalk = writeLeftSide(node, leftNode, rightNode); if (continueWalk) { - getEmitter().startMapping(node, node.getLeftOperandNode(), node.getRightOperandNode()); + getEmitter().startMapping(node, node.getLeftOperandNode()); write(node.getOperator().getOperatorText()); getEmitter().endMapping(node); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c1999209/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java index aed9671..322c778 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java @@ -95,7 +95,7 @@ public class VarDeclarationEmitter extends JSSubEmitter implements fjs.emitDeclarationName(node); if (avnode != null && !(avnode instanceof IEmbedNode)) { - getEmitter().startMapping(node, node.getVariableTypeNode(), avnode); + getEmitter().startMapping(node, node.getVariableTypeNode()); write(ASEmitterTokens.SPACE); writeToken(ASEmitterTokens.EQUAL); getEmitter().endMapping(node); @@ -111,9 +111,7 @@ public class VarDeclarationEmitter extends JSSubEmitter implements IASNode child = node.getChild(i); if (child instanceof ChainedVariableNode) { - getEmitter().startMapping(node, - node.getChild(i - 1), - child); + getEmitter().startMapping(node, node.getChild(i - 1)); writeToken(ASEmitterTokens.COMMA); getEmitter().endMapping(node); fjs.emitVarDeclaration((IVariableNode) child);
