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.