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

[27/33] git commit: [flex-falcon] [refs/heads/develop] - improvements to var declaration source maps

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 <jo...@apache.org>
Authored: Fri Apr 1 14:34:13 2016 -0700
Committer: Josh Tynjala <jo...@apache.org>
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())
         {