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