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)
{