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