You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ms...@apache.org on 2015/07/24 00:17:00 UTC

git commit: [flex-falcon] [refs/heads/develop] - Fixed FLEX-34915, Vector literal javascript output - Fixed literal and tested int, String argument lists.

Repository: flex-falcon
Updated Branches:
  refs/heads/develop c8cb0d600 -> 7dde95caa


Fixed FLEX-34915, Vector literal javascript output
- Fixed literal and tested int, String argument lists.


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

Branch: refs/heads/develop
Commit: 7dde95caa788ae977ca5bbe50a881eb4bae59a1d
Parents: c8cb0d6
Author: Michael Schmalle <ms...@apache.org>
Authored: Thu Jul 23 18:16:34 2015 -0400
Committer: Michael Schmalle <ms...@apache.org>
Committed: Thu Jul 23 18:16:34 2015 -0400

----------------------------------------------------------------------
 .../js/flexjs/TestFlexJSGlobalClasses.java      | 25 ++++++++++-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 12 ++++--
 .../codegen/js/jx/FunctionCallEmitter.java      | 45 +++++++++++++-------
 3 files changed, 63 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7dde95ca/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index 2b2176c..8b70393 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -37,7 +37,7 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses
     {
         return new FlexJSBackend();
     }
-    
+
     @Override
     @Test
     public void testArguments()
@@ -56,4 +56,27 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses
         assertOut("var /** @type {Vector.<string>} */ a = new Array(['Hello', 'World'])");
     }
 
+    @Test
+    public void testVectorLiteral_1()
+    {
+        IVariableNode node = getVariable("var a:Vector.<String> = new <String>[];");
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {Vector.<string>} */ a = []");
+    }
+
+    @Test
+    public void testVectorLiteral_2()
+    {
+        IVariableNode node = getVariable("var a:Vector.<int> = new <int>[0, 1, 2, 3];");
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {Vector.<int>} */ a = [0, 1, 2, 3]");
+    }
+
+    @Test
+    public void testVectorLiteral_3()
+    {
+        IVariableNode node = getVariable("var a:Vector.<String> = new <String>[\"one\", \"two\", \"three\";");
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {Vector.<string>} */ a = [\"one\", \"two\", \"three\"]");
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7dde95ca/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 00f3a4b..7b9b10a 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
@@ -60,6 +60,7 @@ import org.apache.flex.compiler.tree.as.IFunctionNode;
 import org.apache.flex.compiler.tree.as.IGetterNode;
 import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.ILiteralContainerNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.ISetterNode;
@@ -174,6 +175,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     }
 
     @Override
+    public void emitLiteralContainer(ILiteralContainerNode node)
+    {
+        super.emitLiteralContainer(node);
+    }
+
+    @Override
     public void emitMemberKeyword(IDefinitionNode node)
     {
         if (node instanceof IFunctionNode)
@@ -195,7 +202,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     @Override
     public String formatQualifiedName(String name)
     {
-    	/*
+        /*
         if (name.contains("goog.") || name.startsWith("Vector."))
             return name;
         name = name.replaceAll("\\.", "_");
@@ -346,8 +353,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
     // Specific
     //--------------------------------------------------------------------------
 
-    public void emitIsAs(IExpressionNode left, IExpressionNode right,
-            ASTNodeID id, boolean coercion)
+    public void emitIsAs(IExpressionNode left, IExpressionNode right, ASTNodeID id, boolean coercion)
     {
         asIsEmitter.emitIsAs(left, right, id, coercion);
     }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7dde95ca/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 7e34b62..9f616c0 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
@@ -31,14 +31,15 @@ import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens
 import org.apache.flex.compiler.internal.definitions.ClassDefinition;
 import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
 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.VectorLiteralNode;
 import org.apache.flex.compiler.projects.ICompilerProject;
 import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IASNode;
 import org.apache.flex.compiler.tree.as.IFunctionCallNode;
 import org.apache.flex.compiler.utils.NativeUtils;
 
-public class FunctionCallEmitter extends JSSubEmitter implements
-        ISubEmitter<IFunctionCallNode>
+public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFunctionCallNode>
 {
 
     public FunctionCallEmitter(IJSEmitter emitter)
@@ -66,7 +67,27 @@ public class FunctionCallEmitter extends JSSubEmitter implements
 
             if (node.isNewExpression())
             {
-                writeToken(ASEmitterTokens.NEW);
+                if (!(node.getChild(1) instanceof VectorLiteralNode))
+                {
+                    writeToken(ASEmitterTokens.NEW);
+                }
+                else
+                {
+                    VectorLiteralNode vectorLiteralNode = (VectorLiteralNode) node.getChild(1);
+                    write("[");
+                    ContainerNode contentsNode = vectorLiteralNode.getContentsNode();
+                    int len = contentsNode.getChildCount();
+                    for (int i = 0; i < len; i++)
+                    {
+                        getWalker().walk(contentsNode.getChild(i));
+                        if (i < len - 1)
+                        {
+                            writeToken(ASEmitterTokens.COMMA);
+                        }
+                    }
+                    write("]");
+                    return;
+                }
             }
             else
             {
@@ -81,8 +102,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements
                 def = node.resolveCalledExpression(getProject());
                 // all new calls to a class should be fully qualified names
                 if (def instanceof ClassDefinition)
-                    write(getEmitter().formatQualifiedName(
-                            def.getQualifiedName()));
+                    write(getEmitter().formatQualifiedName(def.getQualifiedName()));
                 else
                     // I think we still need this for "new someVarOfTypeClass"
                     getEmitter().getWalker().walk(node.getNameNode());
@@ -94,17 +114,13 @@ public class FunctionCallEmitter extends JSSubEmitter implements
             {
                 if (def != null)
                 {
-                    boolean isInt = def.getBaseName().equals(
-                            IASGlobalFunctionConstants._int);
-                    if (isInt
-                            || def.getBaseName().equals(
-                                    IASGlobalFunctionConstants.trace)
-                            || def.getBaseName().equals(
-                                    IASGlobalFunctionConstants.uint))
+                    boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
+                    if (isInt || def.getBaseName().equals(IASGlobalFunctionConstants.trace)
+                            || def.getBaseName().equals(IASGlobalFunctionConstants.uint))
                     {
                         ICompilerProject project = this.getProject();
                         if (project instanceof FlexJSProject)
-                        	((FlexJSProject)project).needLanguage = true;
+                            ((FlexJSProject) project).needLanguage = true;
                         write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
                         write(ASEmitterTokens.MEMBER_ACCESS);
                         if (isInt)
@@ -118,8 +134,7 @@ public class FunctionCallEmitter extends JSSubEmitter implements
             }
             else
             {
-                fjs.emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
-                        ASTNodeID.Op_AsID, true);
+                fjs.emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
             }
         }
         else