You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/11/20 07:08:48 UTC
git commit: [flex-falcon] [refs/heads/develop] - FLEX-35070 handle
more XML in for each
Repository: flex-falcon
Updated Branches:
refs/heads/develop 3a67410b6 -> 4ff47a036
FLEX-35070 handle more XML in for each
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4ff47a03
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4ff47a03
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4ff47a03
Branch: refs/heads/develop
Commit: 4ff47a0366b731c7649eb204bc572893fd9e2325
Parents: 3a67410
Author: Alex Harui <ah...@apache.org>
Authored: Sat Nov 19 23:08:31 2016 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Sat Nov 19 23:08:31 2016 -0800
----------------------------------------------------------------------
.../internal/codegen/js/jx/ForEachEmitter.java | 29 ++++++++++++++++++++
compiler-jx/src/test/build.xml | 1 +
.../js/flexjs/TestFlexJSGlobalClasses.java | 26 ++++++++++++++++++
3 files changed, 56 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
index 78d0b40..f3651f7 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -21,9 +21,11 @@ package org.apache.flex.compiler.internal.codegen.js.jx;
import org.apache.flex.compiler.codegen.ISubEmitter;
import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
import org.apache.flex.compiler.internal.tree.as.LabeledStatementNode;
import org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode;
@@ -128,6 +130,33 @@ public class ForEachEmitter extends JSSubEmitter implements
isXML = true;
}
}
+ else if (obj.getNodeID() == ASTNodeID.Op_AsID)
+ {
+ IASNode asChild = obj.getChild(1);
+ if (asChild.getNodeID() == ASTNodeID.IdentifierID)
+ {
+ String asName = ((IdentifierNode)asChild).getName();
+ if (asName.equals(IASLanguageConstants.XML) || asName.equals(IASLanguageConstants.XMLList))
+ {
+ write(".elementNames()");
+ isXML = true;
+ }
+ }
+ }
+ else if (obj.getNodeID() == ASTNodeID.FunctionCallID)
+ {
+ FunctionCallNode func = (FunctionCallNode)obj;
+ IExpressionNode funcName = func.getNameNode();
+ if (funcName.getNodeID() == ASTNodeID.IdentifierID)
+ {
+ String asName = ((IdentifierNode)funcName).getName();
+ if (asName.equals(IASLanguageConstants.XML) || asName.equals(IASLanguageConstants.XMLList))
+ {
+ write(".elementNames()");
+ isXML = true;
+ }
+ }
+ }
endMapping(rnode);
startMapping(node, cnode);
writeToken(ASEmitterTokens.PAREN_CLOSE);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/compiler-jx/src/test/build.xml
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/build.xml b/compiler-jx/src/test/build.xml
index d1d6a4a..9f8a196 100644
--- a/compiler-jx/src/test/build.xml
+++ b/compiler-jx/src/test/build.xml
@@ -53,6 +53,7 @@
<target name="unit.tests" depends="download, compile.unit.tests">
<mkdir dir="${compiler}/target/junit-results"/>
+ <delete dir="${compiler}/target/junit-temp"/>
<mkdir dir="${compiler}/target/junit-temp"/>
<junit dir="${compiler.tests}"
fork="yes" forkMode="perBatch" maxmemory="${maxmem}m" timeout="${test.timeout}"
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4ff47a03/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index f18f332..acfd22e 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -603,6 +603,16 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses
assertOut("var /** @type {XMLList} */ b = a.descendants('child')");
}
+ @Ignore
+ public void testXMLDoubleDotLiteral()
+ {
+ IVariableNode node = getVariable("var xml:XML; var a:XML = xml..('http://ns.adobe.com/mxml/2009')::catalog_item[0];");
+ IASNode parentNode = node.getParent();
+ node = (IVariableNode) parentNode.getChild(1);
+ asBlockWalker.visitVariable(node);
+ assertOut("var /** @type {XML} */ a = xml.descendants('http://ns.adobe.com/mxml/2009::catalog_item')[0];");
+ }
+
@Test
public void testXMLAttribute()
{
@@ -770,6 +780,22 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses
}
@Test
+ public void testXMLForEachLoopAs()
+ {
+ IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML in (a as XMLList)) var i:int = p.length();");
+ asBlockWalker.visitForLoop(node);
+ assertOut("var foreachiter0_target = org.apache.flex.utils.Language.as(a, XMLList);\nfor (var foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p = foreachiter0_target.child(foreachiter0);\n\n var /** @type {number} */ i = p.length();}\n");
+ }
+
+ @Test
+ public void testXMLForEachLoopCast()
+ {
+ IForLoopNode node = getForLoopNode("var a:*;for each (var p:XML in XMLList(a)) var i:int = p.length();");
+ asBlockWalker.visitForLoop(node);
+ assertOut("var foreachiter0_target = XMLList(a);\nfor (var foreachiter0 in foreachiter0_target.elementNames()) \n{\nvar p = foreachiter0_target.child(foreachiter0);\n\n var /** @type {number} */ i = p.length();}\n");
+ }
+
+ @Test
public void testNamespaceNoArg()
{
IVariableNode node = getVariable("var a:Namespace = new Namespace();");