You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2020/03/08 05:58:09 UTC

[royale-compiler] branch develop updated: Fix for more cases where XMLList for-each iteration was not working properly e.g. for each(var myAtt:XML in myXML.attributes()) or for each(var myAtt:XML in myXMLList[0].attributes())

This is an automated email from the ASF dual-hosted git repository.

gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git


The following commit(s) were added to refs/heads/develop by this push:
     new c92028f  Fix for more cases where XMLList for-each iteration was not working properly e.g. for each(var myAtt:XML in myXML.attributes()) or for each(var myAtt:XML in myXMLList[0].attributes())
c92028f is described below

commit c92028fc00f39f88f02589b142f0cbc69ba5c5d8
Author: greg-dove <gr...@gmail.com>
AuthorDate: Sun Mar 8 18:03:16 2020 +1300

    Fix for more cases where XMLList for-each iteration was not working properly
    e.g. for each(var myAtt:XML in myXML.attributes()) or for each(var myAtt:XML in myXMLList[0].attributes())
---
 .../internal/codegen/js/jx/ForEachEmitter.java     | 23 ++++++++++++++--------
 .../internal/codegen/js/utils/EmitterUtils.java    |  2 +-
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
index 0def4ce..2902821 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -22,21 +22,18 @@ package org.apache.royale.compiler.internal.codegen.js.jx;
 import org.apache.royale.compiler.codegen.ISubEmitter;
 import org.apache.royale.compiler.codegen.js.IJSEmitter;
 import org.apache.royale.compiler.constants.IASLanguageConstants;
+import org.apache.royale.compiler.definitions.IFunctionDefinition;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
+import org.apache.royale.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.royale.compiler.internal.semantics.SemanticUtils;
 import org.apache.royale.compiler.internal.tree.as.FunctionCallNode;
 import org.apache.royale.compiler.internal.tree.as.IdentifierNode;
 import org.apache.royale.compiler.internal.tree.as.LabeledStatementNode;
 import org.apache.royale.compiler.internal.tree.as.MemberAccessExpressionNode;
 import org.apache.royale.compiler.tree.ASTNodeID;
-import org.apache.royale.compiler.tree.as.IASNode;
-import org.apache.royale.compiler.tree.as.IBinaryOperatorNode;
-import org.apache.royale.compiler.tree.as.IContainerNode;
-import org.apache.royale.compiler.tree.as.IExpressionNode;
-import org.apache.royale.compiler.tree.as.IForLoopNode;
-import org.apache.royale.compiler.tree.as.IVariableExpressionNode;
-import org.apache.royale.compiler.tree.as.IVariableNode;
+import org.apache.royale.compiler.tree.as.*;
 
 public class ForEachEmitter extends JSSubEmitter implements
         ISubEmitter<IForLoopNode>
@@ -163,7 +160,17 @@ public class ForEachEmitter extends JSSubEmitter implements
                     write(".elementNames()");
                     isXML = true;
         		}        		
-        	}
+        	} else if (funcName instanceof IMemberAccessExpressionNode) {
+                IFunctionDefinition funcDef = (IFunctionDefinition) ((IMemberAccessExpressionNode) funcName).getRightOperandNode().resolve(getProject());
+                if (funcDef == null) {
+                    isXML = EmitterUtils.isXMLList((IMemberAccessExpressionNode)funcName, getProject()) || EmitterUtils.isXML(funcName, getProject());
+                } else {
+                    isXML = SemanticUtils.isXMLish(funcDef.resolveReturnType(getProject()), getProject());
+                }
+                if (isXML) {
+                    write(".elementNames()");
+                }
+            }
         }
         endMapping(rnode);
         startMapping(node, cnode);
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
index 24575cc..3d35ec3 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -780,7 +780,7 @@ public class EmitterUtils
      * @param obj
      * @return
      */
-    public static boolean isXMLList(MemberAccessExpressionNode obj, ICompilerProject project)
+    public static boolean isXMLList(IMemberAccessExpressionNode obj, ICompilerProject project)
     {
         IExpressionNode leftNode = obj.getLeftOperandNode();
         IExpressionNode rightNode = obj.getRightOperandNode();