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 <[email protected]> Authored: Thu Jul 23 18:16:34 2015 -0400 Committer: Michael Schmalle <[email protected]> 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
