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)