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();");