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 2020/03/29 02:51:24 UTC

[royale-compiler] branch develop updated: fix for #139

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 1cd2fb6  fix for #139
1cd2fb6 is described below

commit 1cd2fb6dc62eca8b1abdfc0799222c0a351a0400
Author: Alex Harui <ah...@apache.org>
AuthorDate: Sat Mar 28 19:50:51 2020 -0700

    fix for #139
---
 .../codegen/js/jx/BinaryOperatorEmitter.java       | 28 ++++++++++++++++------
 .../codegen/js/royale/TestRoyaleGlobalClasses.java | 10 ++++++++
 2 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index a599a51..2aa2e77 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -428,13 +428,27 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
     			}
             	else if (((JSRoyaleEmitter)getEmitter()).isProxy(dynLeft))
             	{
-                    getWalker().walk(dynLeft);
-                    IExpressionNode rightSide = dyn.getRightOperandNode();
-                    write(".setProperty(");
-                    getWalker().walk(rightSide);
-                    write(", ");
-                    getWalker().walk(node.getRightOperandNode());
-                    write(ASEmitterTokens.PAREN_CLOSE);
+            		if (isAssignment)
+            		{
+	                    getWalker().walk(dynLeft);
+	                    IExpressionNode rightSide = dyn.getRightOperandNode();
+	                    write(".setProperty(");
+	                    getWalker().walk(rightSide);
+	                    write(", ");
+	                    getWalker().walk(node.getRightOperandNode());
+	                    write(ASEmitterTokens.PAREN_CLOSE);
+            		}
+            		else
+            		{
+	                    getWalker().walk(dynLeft);
+	                    IExpressionNode rightSide = dyn.getRightOperandNode();
+	                    write(".getProperty(");
+	                    getWalker().walk(rightSide);
+	                    write(ASEmitterTokens.PAREN_CLOSE);
+	                    write(ASEmitterTokens.SPACE);
+	                    writeToken(op);
+	                    getWalker().walk(node.getRightOperandNode());
+            		}
                     return;            		
             	}
             }
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
index 9bba9dc..d090658 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleGlobalClasses.java
@@ -1509,6 +1509,16 @@ public class TestRoyaleGlobalClasses extends TestGoogGlobalClasses
     }
     
     @Test
+    public void testProxyGetArrayIndexAndCompare()
+    {
+        IFunctionNode node = (IFunctionNode) getNode(
+                "import custom.TestProxy; public class B {public function b() { var a:TestProxy = new TestProxy(); if (a[0] != null) return; }}",
+                IFunctionNode.class, WRAP_LEVEL_PACKAGE, true);
+        asBlockWalker.visitFunction(node);
+        assertOut("/**\n * @export\n */\nfoo.bar.B.prototype.b = function() {\n  var /** @type {custom.TestProxy} */ a = new custom.TestProxy();\n  if (a.getProperty(0) != null)\n    return;\n}");
+    }
+    
+    @Test
     public void testProxyFunctionCall()
     {
         IFunctionNode node = (IFunctionNode) getNode(