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); /*
