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(