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(