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