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 <[email protected]>
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)
                        {

Reply via email to