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 2013/04/12 09:02:34 UTC

[8/8] git commit: one last fix for emitIdentifier

one last fix for emitIdentifier


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

Branch: refs/heads/develop
Commit: 1b5195a6baa5c38af1a3ed0f750097e163650834
Parents: 83c2c12
Author: Alex Harui <ah...@apache.org>
Authored: Fri Apr 12 00:01:43 2013 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Apr 12 00:01:43 2013 -0700

----------------------------------------------------------------------
 .../codegen/js/flexjs/JSFlexJSEmitter.java         |   42 ++++++++++++--
 1 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b5195a6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 989595f..91bc345 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -412,11 +412,41 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             IASNode anode = node
                     .getAncestorOfType(BinaryOperatorAssignmentNode.class);
 
-            boolean isLeftSide = anode != null
-                    && (pnode.equals(anode.getChild(0)) || node.equals(anode
-                            .getChild(0)));
+            boolean isAssignment = false;
+            if (anode != null)
+            {
+            	IASNode leftNode = anode.getChild(0);
+            	if (anode == pnode)
+            	{
+            		if (node == leftNode)
+            			isAssignment = true;
+            	}
+            	else
+            	{
+	            	IASNode parentNode = pnode;
+	            	IASNode thisNode = node;
+	            	while (anode != parentNode)
+	            	{
+	            		if (parentNode instanceof IMemberAccessExpressionNode)
+	            		{
+	            			if (thisNode != parentNode.getChild(1))
+	            			{
+	            				// can't be an assignment because 
+	            				// we're on the left side of a memberaccessexpression
+	            				break;
+	            			}
+	            		}
+	            		if (parentNode == leftNode)
+	            		{
+	            			isAssignment = true;
+	            		}
+	            		thisNode = parentNode;
+	            		parentNode = parentNode.getParent();
+	            	}
+            	}
+            }
 
-            writeGetSetPrefix(!(anode != null && isLeftSide));
+            writeGetSetPrefix(!isAssignment);
             write(node.getName());
             write(ASEmitterTokens.PAREN_OPEN);
 
@@ -424,7 +454,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
 
             if (anode != null)
             {
-                if (isLeftSide)
+                if (isAssignment)
                 {
                     rightSide = ((BinaryOperatorAssignmentNode) anode)
                             .getRightOperandNode();
@@ -441,7 +471,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
             write(ASEmitterTokens.PAREN_CLOSE);
 
             if (anode != null
-                    && !isLeftSide && pnode instanceof IBinaryOperatorNode
+                    && !isAssignment && pnode instanceof IBinaryOperatorNode
                     && !(pnode instanceof IMemberAccessExpressionNode))
             {
                 rightSide = ((IBinaryOperatorNode) pnode).getRightOperandNode();