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 2018/05/25 22:01:18 UTC
[royale-compiler] branch develop updated: handle more complex
expressions in logical assignments. Fixes apache/royale-asjs#252
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 4781d45 handle more complex expressions in logical assignments. Fixes apache/royale-asjs#252
4781d45 is described below
commit 4781d4592e27b968f8b380db12120987ea5bce6f
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri May 25 15:00:55 2018 -0700
handle more complex expressions in logical assignments. Fixes apache/royale-asjs#252
---
.../royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java | 5 +++--
.../compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java | 6 ++----
.../compiler/internal/codegen/js/goog/TestGoogExpressions.java | 9 +++++++++
.../internal/codegen/js/royale/TestRoyaleExpressions.java | 8 ++++++++
4 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 25c3db1..0c0612a 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -1095,11 +1095,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (id == ASTNodeID.Op_LogicalAndAssignID
|| id == ASTNodeID.Op_LogicalOrAssignID)
{
- IIdentifierNode lnode = (IIdentifierNode) node
+ IExpressionNode lnode = node
.getLeftOperandNode();
writeToken(ASEmitterTokens.EQUAL);
- writeToken(lnode.getName());
+ getWalker().walk(lnode);
+ write(ASEmitterTokens.SPACE);
write((id == ASTNodeID.Op_LogicalAndAssignID) ? ASEmitterTokens.LOGICAL_AND
: ASEmitterTokens.LOGICAL_OR);
}
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 eceae30..3e62a20 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
@@ -464,15 +464,13 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
if (id == ASTNodeID.Op_LogicalAndAssignID
|| id == ASTNodeID.Op_LogicalOrAssignID)
{
- IIdentifierNode lnode = (IIdentifierNode) node
+ IExpressionNode lnode = node
.getLeftOperandNode();
writeToken(ASEmitterTokens.EQUAL);
endMapping(node);
- startMapping(node);
- write(lnode.getName());
- endMapping(node);
+ getWalker().walk(lnode);
startMapping(node, node.getLeftOperandNode());
write(ASEmitterTokens.SPACE);
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogExpressions.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogExpressions.java
index c62a563..d7c2072 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/goog/TestGoogExpressions.java
@@ -70,6 +70,15 @@ public class TestGoogExpressions extends TestExpressions
assertOut("a = a && b");
}
+ @Test
+ public void testVisitBinaryOperatorNode_LogicalAndAssignmentInClass()
+ {
+ IBinaryOperatorNode node = (IBinaryOperatorNode)getNode("public var foo:Boolean;private function test(target:RoyaleTest_A):void { target.foo &&= foo }", IBinaryOperatorNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitBinaryOperator(node);
+ // the last foo should probably be this.foo
+ assertOut("target.foo = target.foo && foo");
+ }
+
@Override
@Test
public void testVisitBinaryOperatorNode_LogicalOrAssignment()
diff --git a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
index 2cda9e1..399c93e 100644
--- a/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/royale/compiler/internal/codegen/js/royale/TestRoyaleExpressions.java
@@ -195,6 +195,14 @@ public class TestRoyaleExpressions extends TestGoogExpressions
assertOut("a = a && b");
}
+ @Test
+ public void testVisitBinaryOperatorNode_LogicalAndAssignmentInClass()
+ {
+ IBinaryOperatorNode node = (IBinaryOperatorNode)getNode("public var foo:Boolean;private function test(target:RoyaleTest_A):void { target.foo &&= foo }", IBinaryOperatorNode.class, WRAP_LEVEL_CLASS);
+ asBlockWalker.visitBinaryOperator(node);
+ assertOut("target.foo = target.foo && this.foo");
+ }
+
@Override
@Test
public void testVisitBinaryOperatorNode_LogicalOrAssignment()
--
To stop receiving notification emails like this one, please contact
aharui@apache.org.