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 363efd1  MemberAccessEmitter: improved detection of XMLish expressions 
to determine if dynamic-access-unknown-members is necessary (references #203)
363efd1 is described below

commit 363efd19d6ab16cf0e9bc3d85cef35abd9a493b0
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Dec 20 11:28:31 2021 -0800

    MemberAccessEmitter: improved detection of XMLish expressions to determine 
if dynamic-access-unknown-members is necessary (references #203)
---
 .../internal/codegen/js/jx/MemberAccessEmitter.java         | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 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 9f1c863..60bbe8c 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
@@ -523,9 +523,15 @@ public class MemberAccessEmitter extends JSSubEmitter 
implements
                                IIdentifierNode identifierNode = 
(IIdentifierNode) node.getRightOperandNode();
                                IDefinition resolvedDefinition = 
identifierNode.resolve(getProject());
                                if (resolvedDefinition == null) {
+                                       emitDynamicAccess = true; 
                                        IExpressionNode expressionNode = 
node.getLeftOperandNode();
-                                       while (true)
+                                       while (expressionNode != null)
                                        {
+                                               ITypeDefinition expressionType 
= expressionNode.resolveType(getProject());
+                                               if 
(SemanticUtils.isXMLish(expressionType, getProject())) {
+                                                       emitDynamicAccess = 
false;
+                                                       break;
+                                               }
                                                if (expressionNode instanceof 
IMemberAccessExpressionNode)
                                                {
                                                        
IMemberAccessExpressionNode memberAccess = (IMemberAccessExpressionNode) 
expressionNode;
@@ -538,13 +544,10 @@ public class MemberAccessEmitter extends JSSubEmitter 
implements
                                                }
                                                else
                                                {
+                                                       expressionNode = null;
                                                        break;
                                                }
                                        }
-                                       ITypeDefinition expressionType = 
expressionNode.resolveType(getProject());
-                                       if 
(!SemanticUtils.isXMLish(expressionType, getProject())) {
-                                               emitDynamicAccess = true;
-                                       }
                                }
                        }
                        if (emitDynamicAccess)

Reply via email to