improvements to var declaration source maps
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7e47c2de Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7e47c2de Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7e47c2de Branch: refs/heads/develop Commit: 7e47c2de3e0d4b08ad33f02339e1c81051222e8e Parents: 2e464ee Author: Josh Tynjala <[email protected]> Authored: Fri Apr 1 14:34:13 2016 -0700 Committer: Josh Tynjala <[email protected]> Committed: Fri Apr 1 14:34:13 2016 -0700 ---------------------------------------------------------------------- .../js/sourcemaps/TestSourceMapStatements.java | 54 ++++++++++++++++++++ .../codegen/js/jx/VarDeclarationEmitter.java | 9 ++-- 2 files changed, 59 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7e47c2de/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java new file mode 100644 index 0000000..edb4ed7 --- /dev/null +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapStatements.java @@ -0,0 +1,54 @@ +package org.apache.flex.compiler.internal.codegen.js.sourcemaps; + +import org.apache.flex.compiler.driver.IBackend; +import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend; +import org.apache.flex.compiler.internal.test.SourceMapTestBase; +import org.apache.flex.compiler.tree.as.IVariableNode; + +import org.junit.Test; + +public class TestSourceMapStatements extends SourceMapTestBase +{ + //---------------------------------- + // var declaration + //---------------------------------- + + @Test + public void testVarDeclaration() + { + IVariableNode node = (IVariableNode) getNode("var a;", + IVariableNode.class); + asBlockWalker.visitVariable(node); + //var /** @type {*} */ a + assertMapping(node, 0, 0, 0, 0, 0, 4); + assertMapping(node, 0, 5, 0, 4, 0, 21); + } + + @Test + public void testVarDeclaration_withType() + { + IVariableNode node = (IVariableNode) getNode("var a:int;", + IVariableNode.class); + asBlockWalker.visitVariable(node); + //var /** @type {number} */ a + assertMapping(node, 0, 0, 0, 0, 0, 4); + assertMapping(node, 0, 5, 0, 4, 0, 26); + } + + @Test + public void testVarDeclaration_withTypeAssignedValue() + { + IVariableNode node = (IVariableNode) getNode("var a:int = 42;", + IVariableNode.class); + asBlockWalker.visitVariable(node); + //var /** @type {number} */ a = 42 + assertMapping(node, 0, 0, 0, 0, 0, 4); + assertMapping(node, 0, 5, 0, 4, 0, 26); + assertMapping(node, 0, 9, 0, 27, 0, 30); + } + + protected IBackend createBackend() + { + return new FlexJSBackend(); + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7e47c2de/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 3829b68..159a4f0 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 @@ -53,10 +53,13 @@ public class VarDeclarationEmitter extends JSSubEmitter implements fjs.emitMemberKeyword(node); } + //we could use getVariableTypeNode(), but it might not have a line + //and column. this can happen when the type is omitted in the code + //and the compiler generates a node for type * + getEmitter().startMapping(node, node.getNameExpressionNode().getAbsoluteEnd() - node.getAbsoluteStart()); IExpressionNode avnode = node.getAssignedValueNode(); if (avnode != null) { - getEmitter().startMapping(node.getVariableTypeNode()); IDefinition def = avnode.resolveType(getWalker().getProject()); String opcode = avnode.getNodeID().getParaphrase(); @@ -64,14 +67,12 @@ public class VarDeclarationEmitter extends JSSubEmitter implements { fjs.getDocEmitter().emitVarDoc(node, def, getWalker().getProject()); } - getEmitter().endMapping(node.getVariableTypeNode()); } else { - getEmitter().startMapping(node.getVariableTypeNode()); fjs.getDocEmitter().emitVarDoc(node, null, getWalker().getProject()); - getEmitter().endMapping(node.getVariableTypeNode()); } + getEmitter().endMapping(node); if (!(node instanceof ChainedVariableNode) && node.isConst()) {
