FLEX-35072 handle XMLList as identifiers

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

Branch: refs/heads/develop
Commit: 395863b005e7cd35e077c303cb9fd73d6d7f1802
Parents: f05ad76
Author: Alex Harui <[email protected]>
Authored: Tue Apr 12 16:06:21 2016 -0700
Committer: Alex Harui <[email protected]>
Committed: Tue Apr 12 16:06:21 2016 -0700

----------------------------------------------------------------------
 .../codegen/js/flexjs/TestFlexJSGlobalClasses.java |  8 ++++++++
 .../codegen/js/jx/BinaryOperatorEmitter.java       | 17 +++++++++++++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/395863b0/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index 6536414..3fb8e67 100644
--- 
a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ 
b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -565,6 +565,14 @@ public class TestFlexJSGlobalClasses extends 
TestGoogGlobalClasses
     }
     
     @Test
+    public void testXMLListConcat2()
+    {
+        IBinaryOperatorNode node = getBinaryNode("var a:XMLList; var 
b:XMLList; a += b");
+        asBlockWalker.visitBinaryOperator(node);
+        assertOut("a.concat(b)");
+    }
+    
+    @Test
     public void testXMLListAddAndAssign()
     {
         IBinaryOperatorNode node = getBinaryNode("var a:XML = new XML(\"<top 
attr1='cat'><child attr2='dog'><grandchild 
attr3='fish'>text</grandchild></child></top>\");a.foo = a.child + 
a..grandchild");

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/395863b0/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 6e5cc75..aab9712 100644
--- 
a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ 
b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -28,6 +28,7 @@ import 
org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
 import 
org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
 import org.apache.flex.compiler.internal.tree.as.MemberAccessExpressionNode;
 import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
 import org.apache.flex.compiler.projects.ICompilerProject;
@@ -225,6 +226,22 @@ public class BinaryOperatorEmitter extends JSSubEmitter 
implements
                     return;
                 }
             }
+            else if (leftSide.getNodeID() == ASTNodeID.IdentifierID)
+            {
+                       IDefinition leftDef = 
leftSide.resolveType(getWalker().getProject());
+                       if ((leftDef != null)
+                               && IdentifierNode.isXMLish(leftDef, 
getWalker().getProject()))
+                       {
+                       if (node.getNodeID() == ASTNodeID.Op_AddAssignID)
+                       {
+                           getWalker().walk(leftSide);
+                           write(".concat(");
+                           getWalker().walk(node.getRightOperandNode());
+                           write(ASEmitterTokens.PAREN_CLOSE);
+                           return;
+                       }
+                }
+            }
 
             super_emitBinaryOperator(node);
             /*

Reply via email to