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 2017/03/08 08:02:27 UTC

git commit: [flex-falcon] [refs/heads/develop] - handle xml.@['someProp']

Repository: flex-falcon
Updated Branches:
  refs/heads/develop 85a170101 -> 6e14d6835


handle xml.@['someProp']


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

Branch: refs/heads/develop
Commit: 6e14d68351e6b530179e5fbaf9a6416775a42bd4
Parents: 85a1701
Author: Alex Harui <ah...@apache.org>
Authored: Wed Mar 8 00:02:21 2017 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Mar 8 00:02:21 2017 -0800

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java        | 18 +++++++++++++++---
 .../codegen/js/jx/DynamicAccessEmitter.java       |  3 +++
 .../codegen/js/jx/MemberAccessEmitter.java        |  5 ++++-
 .../js/flexjs/TestFlexJSGlobalClasses.java        | 10 ++++++++++
 4 files changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6e14d683/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 4bcc3cf..abb9d3b 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -1060,9 +1060,21 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         }
         else if (node.getNodeID() == ASTNodeID.Op_AtID)
         {
-        	write("attribute('");
-            getWalker().walk(node.getOperandNode());
-        	write("')");
+        	IASNode op = node.getOperandNode();
+        	if (op != null)
+        	{
+            	write("attribute('");
+        		getWalker().walk(node.getOperandNode());
+            	write("')");
+        	}
+        	else if (node.getParent().getNodeID() == ASTNodeID.ArrayIndexExpressionID)
+        	{
+        		DynamicAccessNode parentNode = (DynamicAccessNode)node.getParent();
+            	write("attribute(");
+        		getWalker().walk(parentNode.getRightOperandNode());        		
+            	write(")");
+        	}
+        		
         	return;
         }
 

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6e14d683/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
index f02d298..39321b7 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/DynamicAccessEmitter.java
@@ -23,6 +23,7 @@ import org.apache.flex.compiler.codegen.ISubEmitter;
 import org.apache.flex.compiler.codegen.js.IJSEmitter;
 import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.tree.ASTNodeID;
 import org.apache.flex.compiler.tree.as.IDynamicAccessNode;
 import org.apache.flex.compiler.tree.as.IExpressionNode;
 
@@ -39,6 +40,8 @@ public class DynamicAccessEmitter extends JSSubEmitter implements
     {
         IExpressionNode leftOperandNode = node.getLeftOperandNode();
         getWalker().walk(leftOperandNode);
+        if (leftOperandNode.getNodeID() == ASTNodeID.Op_AtID)
+        	return;
 
         startMapping(node, leftOperandNode);
         write(ASEmitterTokens.SQUARE_OPEN);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6e14d683/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index 2f5f278..6060c5e 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -32,6 +32,7 @@ import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
 import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter.DatePropertiesGetters;
 import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
 import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.internal.tree.as.DynamicAccessNode;
 import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
 import org.apache.flex.compiler.internal.tree.as.GetterNode;
 import org.apache.flex.compiler.internal.tree.as.IdentifierNode;
@@ -85,7 +86,9 @@ public class MemberAccessEmitter extends JSSubEmitter implements
         		boolean descendant = (node.getOperator() == OperatorType.DESCENDANT_ACCESS);
         		boolean child = (node.getOperator() == OperatorType.MEMBER_ACCESS) && 
         							(!(parentNode instanceof FunctionCallNode)) &&
-        							rightNode.getNodeID() != ASTNodeID.Op_AtID;
+        							rightNode.getNodeID() != ASTNodeID.Op_AtID &&
+        							!((rightNode.getNodeID() == ASTNodeID.ArrayIndexExpressionID) && 
+        									(((DynamicAccessNode)rightNode).getLeftOperandNode().getNodeID() == ASTNodeID.Op_AtID));
         		if (descendant || child)
 	        	{
 	        		writeLeftSide(node, leftNode, rightNode);

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6e14d683/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
index 8eb01bd..74b9d1e 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalClasses.java
@@ -625,6 +625,16 @@ public class TestFlexJSGlobalClasses extends TestGoogGlobalClasses
     }
     
     @Test
+    public void testXMLAttributeBracket()
+    {
+        IVariableNode node = getVariable("var a:XML = new XML(\"<top attr1='cat'><child attr2='dog'><grandchild attr3='fish'>text</grandchild></child></top>\");var b:XMLList = a.@[\"attr1\"];");
+        IASNode parentNode = node.getParent();
+        node = (IVariableNode) parentNode.getChild(1);
+        asBlockWalker.visitVariable(node);
+        assertOut("var /** @type {XMLList} */ b = a.attribute(\"attr1\")");
+    }
+    
+    @Test
     public void testXMLAttributeToString()
     {
         IVariableNode node = getVariable("var a:XML = new XML(\"<top attr1='cat'><child attr2='dog'><grandchild attr3='fish'>text</grandchild></child></top>\");var b:String = a.@attr1;");