You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2021/12/15 19:08:44 UTC

[royale-compiler] branch develop updated: MemberAccessEmitter: if left side resolves to an XMLish type, don't use dynamic access for unknown members because XML members always fail to resolve to a definition (closes #203)

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

joshtynjala 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 6c25d1d  MemberAccessEmitter: if left side resolves to an XMLish type, don't use dynamic access for unknown members because XML members always fail to resolve to a definition (closes #203)
6c25d1d is described below

commit 6c25d1d623be5004f1865c67fca87e0bb34402c8
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Wed Dec 15 11:08:08 2021 -0800

    MemberAccessEmitter: if left side resolves to an XMLish type, don't use dynamic access for unknown members because XML members always fail to resolve to a definition (closes #203)
---
 .../compiler/internal/codegen/js/jx/MemberAccessEmitter.java  | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index 2137004..606e080 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -29,13 +29,11 @@ import org.apache.royale.compiler.definitions.*;
 import org.apache.royale.compiler.definitions.IDefinition;
 import org.apache.royale.compiler.definitions.INamespaceDefinition;
 import org.apache.royale.compiler.definitions.IPackageDefinition;
-import org.apache.royale.compiler.definitions.references.IResolvedQualifiersReference;
 import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
 import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleDocEmitter;
 import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
-import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.royale.compiler.internal.codegen.js.jx.BinaryOperatorEmitter.DatePropertiesGetters;
 import org.apache.royale.compiler.internal.definitions.AccessorDefinition;
@@ -50,7 +48,6 @@ import org.apache.royale.compiler.projects.ICompilerProject;
 import org.apache.royale.compiler.tree.ASTNodeID;
 import org.apache.royale.compiler.tree.as.*;
 import org.apache.royale.compiler.tree.as.IOperatorNode.OperatorType;
-import org.apache.royale.compiler.tree.mxml.IMXMLSingleDataBindingNode;
 import org.apache.royale.compiler.utils.ASNodeUtils;
 
 import java.util.ArrayList;
@@ -525,7 +522,13 @@ public class MemberAccessEmitter extends JSSubEmitter implements
 			{
 				IIdentifierNode identifierNode = (IIdentifierNode) node.getRightOperandNode();
 				IDefinition resolvedDefinition = identifierNode.resolve(getProject());
-				emitDynamicAccess = resolvedDefinition == null;
+				if (resolvedDefinition == null) {
+					IExpressionNode expressionNode = node.getLeftOperandNode();
+					ITypeDefinition expressionType = expressionNode.resolveType(getProject());
+					if (!SemanticUtils.isXMLish(expressionType, getProject())) {
+						emitDynamicAccess = true;
+					}
+				}
 			}
 			if (emitDynamicAccess)
 			{