cleaned up some parts of the source map to include things like commas and 
parentheses, moved assignment operator out of assigned value because it's not 
in the source location of that node, but before it (and that made it possible 
to source map it)


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

Branch: refs/heads/develop
Commit: 109b56b894ac8572dbb1e4251641a7f87b9df065
Parents: ad6f1d0
Author: Josh Tynjala <[email protected]>
Authored: Sat Mar 26 17:36:48 2016 -0700
Committer: Josh Tynjala <[email protected]>
Committed: Sat Mar 26 17:36:48 2016 -0700

----------------------------------------------------------------------
 .../codegen/js/goog/TestGoogGlobalClasses.java  |  2 +-
 .../js/goog/TestGoogGlobalFunctions.java        |  2 +-
 .../compiler/internal/codegen/as/ASEmitter.java | 25 +++++--
 .../compiler/internal/codegen/js/JSEmitter.java | 49 ++++++++++++--
 .../internal/codegen/js/JSEmitterTokens.java    |  3 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      |  7 --
 .../internal/codegen/js/goog/JSGoogEmitter.java | 70 +++++++++-----------
 .../codegen/js/jx/FunctionCallEmitter.java      |  6 +-
 .../codegen/js/jx/VarDeclarationEmitter.java    |  8 ++-
 .../codegen/js/vf2js/JSVF2JSEmitter.java        |  6 +-
 10 files changed, 114 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java
 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java
index 1bbdf55..fc9e523 100644
--- 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java
+++ 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java
@@ -271,7 +271,7 @@ public class TestGoogGlobalClasses extends TestGlobalClasses
     {
         IVariableNode node = getVariable("var a:Vector.<String> = new 
Vector.<String>(['Hello', 'World']);");
         asBlockWalker.visitVariable(node);
-        assertOut("var /** @type {Vector.<string>} */ a = new Vector(['Hello', 
'World'])");
+        assertOut("var /** @type {Vector.<string>} */ a = new Array(['Hello', 
'World'])");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java
 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java
index 79acf92..614edd5 100644
--- 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java
+++ 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java
@@ -209,7 +209,7 @@ public class TestGoogGlobalFunctions extends 
TestGlobalFunctions
     {
         IVariableNode node = getVariable("var a:Vector.<String> = 
Vector.<String>(['Hello', 'World']);");
         asBlockWalker.visitVariable(node);
-        assertOut("var /** @type {Vector.<string>} */ a = Vector(['Hello', 
'World'])");
+        assertOut("var /** @type {Vector.<string>} */ a = Array(['Hello', 
'World'])");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 14ae6c5..47f633b 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -523,7 +523,14 @@ public class ASEmitter implements IASEmitter, IEmitter
 
         emitDeclarationName(node);
         emitType(node.getVariableTypeNode());
-        emitAssignedValue(node.getAssignedValueNode());
+        
+        IExpressionNode avnode = node.getAssignedValueNode();
+        if (avnode != null)
+        {
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
+            emitAssignedValue(avnode);
+        }
 
         if (!(node instanceof ChainedVariableNode))
         {
@@ -570,7 +577,14 @@ public class ASEmitter implements IASEmitter, IEmitter
 
         emitMemberName(node);
         emitType(node.getVariableTypeNode());
-        emitAssignedValue(node.getAssignedValueNode());
+
+        IExpressionNode avnode = node.getAssignedValueNode();
+        if (avnode != null)
+        {
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
+            emitAssignedValue(avnode);
+        }
 
         if (!(node instanceof ChainedVariableNode))
         {
@@ -810,12 +824,11 @@ public class ASEmitter implements IASEmitter, IEmitter
 
     protected void emitAssignedValue(IExpressionNode node)
     {
-        if (node != null)
+        if (node == null)
         {
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            getWalker().walk(node);
+            return;
         }
+        getWalker().walk(node);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/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 c830f73..d510230 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
@@ -33,7 +33,6 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitter;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.tree.as.ContainerNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionNode;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
@@ -44,11 +43,14 @@ import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
 import org.apache.flex.compiler.tree.as.IKeywordNode;
 import org.apache.flex.compiler.tree.as.ILiteralContainerNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.INumericLiteralNode;
+import org.apache.flex.compiler.tree.as.IObjectLiteralValuePairNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.IReturnNode;
 import org.apache.flex.compiler.tree.as.ITypeNode;
+import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.visitor.IBlockWalker;
 
@@ -222,7 +224,7 @@ public class JSEmitter extends ASEmitter implements 
IJSEmitter
             getWalker().walk(child);
             if (i < len - 1)
             {
-                startMapping(node);
+                startMapping(node, child.getAbsoluteEnd() - 
node.getAbsoluteStart() + 1);
                 writeToken(ASEmitterTokens.COMMA);
                 endMapping(node);
             }
@@ -230,27 +232,62 @@ public class JSEmitter extends ASEmitter implements 
IJSEmitter
 
         if (postFix != null)
         {
-            startMapping(node);
+            startMapping(node, node.getAbsoluteEnd() - 
node.getAbsoluteStart());
             write(postFix);
             endMapping(node);
         }
     }
 
     @Override
+    public void emitObjectLiteralValuePair(IObjectLiteralValuePairNode node)
+    {
+        ISourceLocation sourceLocationNode = (ISourceLocation) node;
+        
+        IExpressionNode nameNode = node.getNameNode();
+        if (!(nameNode instanceof ILiteralNode))
+        {
+            startMapping(nameNode);
+        }
+        getWalker().walk(node.getNameNode());
+        if (!(nameNode instanceof ILiteralNode))
+        {
+            endMapping(nameNode);
+        }
+        
+        startMapping(sourceLocationNode, nameNode.getAbsoluteEnd() - 
sourceLocationNode.getAbsoluteStart());
+        write(ASEmitterTokens.COLON);
+        endMapping(sourceLocationNode);
+        
+        getWalker().walk(node.getValueNode());
+    }
+
+    @Override
     public void emitReturn(IReturnNode node)
     {
+        IExpressionNode rnode = node.getReturnValueNode();
+        boolean hasReturnValue = rnode != null && rnode.getNodeID() != 
ASTNodeID.NilID;
+        
         startMapping(node);
         write(ASEmitterTokens.RETURN);
-        endMapping(node);
-        IExpressionNode rnode = node.getReturnValueNode();
-        if (rnode != null && rnode.getNodeID() != ASTNodeID.NilID)
+        if (hasReturnValue)
         {
             write(ASEmitterTokens.SPACE);
+        }
+        endMapping(node);
+        
+        if (hasReturnValue)
+        {
             getWalker().walk(rnode);
         }
     }
 
     @Override
+    public void emitTypedExpression(ITypedExpressionNode node)
+    {
+        write(JSEmitterTokens.ARRAY);
+    }
+
+    @Override
     public void emitMemberKeyword(IDefinitionNode node)
     {
         IKeywordNode keywordNode = null;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java
index ab8d079..82935af 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java
@@ -30,7 +30,8 @@ public enum JSEmitterTokens implements IEmitterTokens
     DEFINE_PROPERTIES("defineProperties"),
     INTERFACE("interface"),
     PROTOTYPE("prototype"),
-    SLICE("slice");
+    SLICE("slice"),
+    ARRAY("Array");
 
     private String token;
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 94e1d5e..355250f 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -87,7 +87,6 @@ import org.apache.flex.compiler.tree.as.INamespaceNode;
 import org.apache.flex.compiler.tree.as.IPackageNode;
 import org.apache.flex.compiler.tree.as.IScopedNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
-import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IUnaryOperatorNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.utils.ASNodeUtils;
@@ -622,12 +621,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter 
implements IJSFlexJSEmitter
     }
 
     @Override
-    public void emitTypedExpression(ITypedExpressionNode node)
-    {
-        write(JSGoogEmitterTokens.ARRAY);
-    }
-
-    @Override
     public void emitIdentifier(IIdentifierNode node)
     {
         identifierEmitter.emit(node);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 6e7d555..bc48f83 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -70,7 +70,6 @@ import 
org.apache.flex.compiler.tree.as.INamespaceAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
 import org.apache.flex.compiler.tree.as.ITypeNode;
-import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
 import org.apache.flex.compiler.tree.as.IVariableNode;
 import org.apache.flex.compiler.utils.ASNodeUtils;
@@ -422,8 +421,12 @@ public class JSGoogEmitter extends JSEmitter implements 
IJSGoogEmitter
         }
 
         emitDeclarationName(node);
-        if (!(avnode instanceof IEmbedNode))
+        if (avnode != null && !(avnode instanceof IEmbedNode))
+        {
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
             emitAssignedValue(avnode);
+        }
 
         if (!(node instanceof ChainedVariableNode))
         {
@@ -881,49 +884,42 @@ public class JSGoogEmitter extends JSEmitter implements 
IJSGoogEmitter
     @Override
     public void emitAssignedValue(IExpressionNode node)
     {
-        if (node != null)
+        if (node == null)
         {
-            write(ASEmitterTokens.SPACE);
-            writeToken(ASEmitterTokens.EQUAL);
-            IDefinition definition = node.resolve(getWalker().getProject());
-            if (node.getNodeID() == ASTNodeID.ClassReferenceID)
+            return;
+        }
+        IDefinition definition = node.resolve(getWalker().getProject());
+        if (node.getNodeID() == ASTNodeID.ClassReferenceID)
+        {
+            write(definition.getQualifiedName());
+        }
+        else
+        {
+            // AJH need Language.bind here and maybe not require
+            // that the node is a MemberAccessExpression
+            if (definition instanceof FunctionDefinition &&
+                    !((FunctionDefinition)definition).isStatic() &&
+                    (!(definition instanceof AccessorDefinition)) &&
+                    node instanceof MemberAccessExpressionNode)
             {
-                write(definition.getQualifiedName());
+                emitClosureStart();
+                getWalker().walk(node);
+                writeToken(ASEmitterTokens.COMMA);
+                
getWalker().walk(((MemberAccessExpressionNode)node).getLeftOperandNode());
+                
emitClosureEnd(((MemberAccessExpressionNode)node).getLeftOperandNode());
             }
-            else
+            else if (node.getNodeID() == ASTNodeID.XMLContentID)
             {
-                       // AJH need Language.bind here and maybe not require
-               // that the node is a MemberAccessExpression
-               if (definition instanceof FunctionDefinition &&
-                               !((FunctionDefinition)definition).isStatic() &&
-                               (!(definition instanceof AccessorDefinition)) &&
-                               node instanceof MemberAccessExpressionNode)
-               {
-                    emitClosureStart();
-                       getWalker().walk(node);
-                    writeToken(ASEmitterTokens.COMMA);
-                       
getWalker().walk(((MemberAccessExpressionNode)node).getLeftOperandNode());
-                    
emitClosureEnd(((MemberAccessExpressionNode)node).getLeftOperandNode());
-               }
-               else if (node.getNodeID() == ASTNodeID.XMLContentID)
-               {
-                       write("new XML");
-                       writeToken(ASEmitterTokens.PAREN_OPEN);
-                       getWalker().walk(node);
-                       writeToken(ASEmitterTokens.PAREN_CLOSE);
-               }
-               else
-                       getWalker().walk(node);
+                write("new XML");
+                writeToken(ASEmitterTokens.PAREN_OPEN);
+                getWalker().walk(node);
+                writeToken(ASEmitterTokens.PAREN_CLOSE);
             }
+            else
+                getWalker().walk(node);
         }
     }
 
-    @Override
-    public void emitTypedExpression(ITypedExpressionNode node)
-    {
-        getWalker().walk(node.getCollectionNode());
-    }
-
     // XXX Dead
     @Override
     public void emitForEachLoop(IForLoopNode node)

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index 5f590e1..9c4d225 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -104,16 +104,16 @@ public class FunctionCallEmitter extends JSSubEmitter 
implements ISubEmitter<IFu
             if (node.isNewExpression())
             {
                 def = node.resolveCalledExpression(getProject());
+                IExpressionNode nameNode = node.getNameNode();
                 // all new calls to a class should be fully qualified names
                 if (def instanceof ClassDefinition)
                 {
-                    getEmitter().startMapping(node);
+                    getEmitter().startMapping(nameNode);
                     
write(getEmitter().formatQualifiedName(def.getQualifiedName()));
-                    getEmitter().endMapping(node);
+                    getEmitter().endMapping(nameNode);
                 }
                 else
                 {
-                    IExpressionNode nameNode = node.getNameNode();
                     // wrap "new someFunctionCall(args)" in parens so the
                     // function call gets parsed and evaluated before new
                     // otherwise it just looks like any other "new function"

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/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 b945282..3829b68 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
@@ -79,8 +79,14 @@ public class VarDeclarationEmitter extends JSSubEmitter 
implements
         }
 
         fjs.emitDeclarationName(node);
-        if (!(avnode instanceof IEmbedNode))
+        if (avnode != null && !(avnode instanceof IEmbedNode))
+        {
+            getEmitter().startMapping(node, 
node.getVariableTypeNode().getEnd() - node.getStart());
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
+            getEmitter().endMapping(node);
             fjs.emitAssignedValue(avnode);
+        }
 
         if (!(node instanceof ChainedVariableNode))
         {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index fceccc2..0eb2a78 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -350,8 +350,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter 
implements IJSVF2JSEmitter
         }
 
         emitDeclarationName(node);
-        if (!(avnode instanceof IEmbedNode))
+        if (avnode != null && !(avnode instanceof IEmbedNode))
+        {
+            write(ASEmitterTokens.SPACE);
+            writeToken(ASEmitterTokens.EQUAL);
             emitAssignedValue(avnode);
+        }
 
         if (!(node instanceof ChainedVariableNode))
         {

Reply via email to