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