You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/09/07 22:40:10 UTC

[09/50] git commit: [flex-falcon] [refs/heads/master] - special case toString() on *

special case toString() on *


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/b10a1cd3
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/b10a1cd3
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/b10a1cd3

Branch: refs/heads/master
Commit: b10a1cd3d08df58228d459fcd0351489716877d5
Parents: 23df02a
Author: Alex Harui <ah...@apache.org>
Authored: Wed Aug 10 15:28:38 2016 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Aug 10 15:28:38 2016 -0700

----------------------------------------------------------------------
 .../codegen/js/jx/BinaryOperatorEmitter.java        | 16 ++++++++++++++++
 .../codegen/js/flexjs/TestFlexJSExpressions.java    | 10 ++++++++++
 2 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b10a1cd3/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 87e07c5..bb454fc 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -300,6 +300,9 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
             	{
 		        	if (rightDef == null ||
 		        			(!(rightDef.getQualifiedName().equals(IASLanguageConstants.String) ||
+		        			  (rightDef.getQualifiedName().equals(IASLanguageConstants.ANY_TYPE)
+		                    		&& rNode.getNodeID() == ASTNodeID.FunctionCallID &&
+		                    		isToString(rNode)) ||
 		        			  // if not an assignment we don't need to coerce numbers
 		        			  (!isAssignment && rightIsNumber) ||
 		        			   rightDef.getQualifiedName().equals(IASLanguageConstants.Null))))
@@ -381,6 +384,19 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
             */
         }
     }
+    
+    private boolean isToString(IASNode rNode)
+    {
+    	IExpressionNode fnNameNode = ((FunctionCallNode)rNode).getNameNode();
+    	if (fnNameNode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+    	{
+    		MemberAccessExpressionNode mae = (MemberAccessExpressionNode)fnNameNode;
+    		IExpressionNode rightNode = mae.getRightOperandNode();
+    		return rightNode.getNodeID() == ASTNodeID.IdentifierID && 
+    				((IdentifierNode)rightNode).getName().equals("toString");
+    	}
+    	return false;
+    }
 
     private void super_emitBinaryOperator(IBinaryOperatorNode node, String coercion)
     {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/b10a1cd3/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index 40ee688..2def937 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -624,6 +624,16 @@ public class TestFlexJSExpressions extends TestGoogExpressions
     }
 
     @Test
+    public void testVisitBinaryOperatorNode_StringAssignFromStarToString()
+    {
+        IBinaryOperatorNode node = (IBinaryOperatorNode) getNode(
+                "public class B {public var b:String; public var c:*; public function d() { b = c.toString(); }}",
+                IBinaryOperatorNode.class, WRAP_LEVEL_PACKAGE);
+        asBlockWalker.visitBinaryOperator(node);
+        assertOut("this.b = this.c.toString()");
+    }
+
+    @Test
     public void testNamedFunctionAsArgument()
     {
         IFunctionNode node = (IFunctionNode) getNode(