You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2019/03/22 05:26:48 UTC
[royale-compiler] branch develop updated: handle proxy in bracket
access
This is an automated email from the ASF dual-hosted git repository.
aharui 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 fbd9bc3 handle proxy in bracket access
fbd9bc3 is described below
commit fbd9bc3b9e48c80dbd8c1d32a6f83221e314efdd
Author: Alex Harui <ah...@apache.org>
AuthorDate: Thu Mar 21 22:26:29 2019 -0700
handle proxy in bracket access
---
.../internal/codegen/js/jx/DynamicAccessEmitter.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
index d0899cd..2fd5085 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
@@ -26,10 +26,13 @@ import org.apache.royale.compiler.definitions.ITypeDefinition;
import org.apache.royale.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.royale.compiler.internal.codegen.js.JSSubEmitter;
import org.apache.royale.compiler.internal.codegen.js.royale.JSRoyaleEmitter;
+import org.apache.royale.compiler.internal.tree.as.FunctionCallNode;
import org.apache.royale.compiler.internal.tree.as.MemberAccessExpressionNode;
import org.apache.royale.compiler.tree.ASTNodeID;
import org.apache.royale.compiler.tree.as.IDynamicAccessNode;
import org.apache.royale.compiler.tree.as.IExpressionNode;
+import org.apache.royale.compiler.tree.as.ILiteralNode;
+import org.apache.royale.compiler.tree.as.IOperatorNode.OperatorType;
public class DynamicAccessEmitter extends JSSubEmitter implements
ISubEmitter<IDynamicAccessNode>
@@ -54,11 +57,16 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
(JSRoyaleEmitter)ijs : null;
if (fjs != null)
{
+ boolean isProxy = false;
boolean isXML = false;
if (leftOperandNode instanceof MemberAccessExpressionNode)
isXML = fjs.isLeftNodeXMLish((MemberAccessExpressionNode)leftOperandNode);
else if (leftOperandNode instanceof IExpressionNode)
isXML = fjs.isXML((IExpressionNode)leftOperandNode);
+ if (leftOperandNode instanceof MemberAccessExpressionNode)
+ isProxy = fjs.isProxy((MemberAccessExpressionNode)leftOperandNode);
+ else if (leftOperandNode instanceof IExpressionNode)
+ isProxy = fjs.isProxy((IExpressionNode)leftOperandNode);
if (isXML)
{
if (type.isInstanceOf("String", getProject()))
@@ -74,6 +82,17 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
return;
}
}
+ else if (isProxy)
+ {
+ boolean isLiteral = rightOperandNode instanceof ILiteralNode;
+ write(".getProperty(");
+ if (isLiteral) write("'");
+ String s = fjs.stringifyNode(rightOperandNode);
+ write(s);
+ if (isLiteral) write("'");
+ write(")");
+ return;
+ }
}
startMapping(node, leftOperandNode);