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 2014/11/15 07:28:27 UTC

[5/8] git commit: [flex-falcon] [refs/heads/develop] - handle ++

handle ++


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

Branch: refs/heads/develop
Commit: 6207b3c8aa4149838d3d9d0451d066c91954a145
Parents: f6c099b
Author: Alex Harui <ah...@apache.org>
Authored: Fri Nov 14 07:58:22 2014 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Nov 14 07:58:22 2014 -0800

----------------------------------------------------------------------
 .../compiler/internal/codegen/as/ASEmitter.java |  6 ++-
 .../internal/codegen/as/ASEmitterTokens.java    |  2 +-
 .../codegen/js/flexjs/JSFlexJSEmitter.java      | 47 ++++++++++++++++++++
 .../js/flexjs/JSFlexJSEmitterTokens.java        |  4 ++
 4 files changed, 57 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6207b3c8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index b84d1f2..9214d39 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -1465,11 +1465,15 @@ public class ASEmitter implements IASEmitter, IEmitter
 
     public String stringifyNode(IASNode node)
     {
+    	boolean oldBufferWrite = isBufferWrite();
+        StringBuilder oldBuilder = this.builder;
+        this.builder = new StringBuilder();
         setBufferWrite(true);
         getWalker().walk(node);
         String result = getBuilder().toString();
         getBuilder().setLength(0);
-        setBufferWrite(false);
+        this.builder = oldBuilder;
+        setBufferWrite(oldBufferWrite);
         return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6207b3c8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitterTokens.java
index fc1f1c7..d783109 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitterTokens.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitterTokens.java
@@ -139,7 +139,7 @@ public enum ASEmitterTokens implements IEmitterTokens
     //    int TOKEN_OPERATOR_BITWISE_RIGHT_SHIFT = 104;
     //    int TOKEN_OPERATOR_BITWISE_UNSIGNED_RIGHT_SHIFT = 105;
     MINUS("-"),
-    //    int TOKEN_OPERATOR_PLUS = 107;
+    PLUS("+"),
     //    int TOKEN_OPERATOR_DIVISION = 108;
     //    int TOKEN_OPERATOR_MODULO = 109;
     //    int TOKEN_OPERATOR_STAR = 110;

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6207b3c8/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 e1c8758..7dbd74e 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
@@ -81,6 +81,7 @@ import org.apache.flex.compiler.tree.as.IIdentifierNode;
 import org.apache.flex.compiler.tree.as.IInterfaceNode;
 import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode;
+import org.apache.flex.compiler.tree.as.IUnaryOperatorNode;
 import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
 import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
 import org.apache.flex.compiler.tree.as.IParameterNode;
@@ -1696,5 +1697,51 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
         write("E4XFilter");
         write(ASEmitterTokens.SINGLE_QUOTE);
     }
+    @Override
+    public void emitUnaryOperator(IUnaryOperatorNode node)
+    {
+        if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+                || node.getNodeID() == ASTNodeID.Op_PreDecrID
+                || node.getNodeID() == ASTNodeID.Op_PostIncrID
+                || node.getNodeID() == ASTNodeID.Op_PostDecrID)
+        {
+            IExpressionNode opNode = node.getOperandNode();
+            String getString = stringifyNode(opNode);
+            int index = getString.lastIndexOf("get_");
+            if (index != -1)
+            {
+                write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+                write(ASEmitterTokens.MEMBER_ACCESS);
+            	if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
+            		write(JSFlexJSEmitterTokens.PREINCREMENT);
+            	else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
+            		write(JSFlexJSEmitterTokens.POSTINCREMENT);
+            	else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
+            		write(JSFlexJSEmitterTokens.PREDECREMENT);
+            	else
+            		write(JSFlexJSEmitterTokens.POSTDECREMENT);
+                write(ASEmitterTokens.PAREN_OPEN);
+                String obj = getString.substring(0, index - 1);
+                write(obj);
+                write(ASEmitterTokens.COMMA);
+            	String prop = getString.substring(index + 4);            	
+            	int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
+            	prop = prop.substring(0, endIndex);
+                write(ASEmitterTokens.DOUBLE_QUOTE);
+            	write(prop);
+                write(ASEmitterTokens.DOUBLE_QUOTE);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
+            }
+            else
+            {
+                write(ASEmitterTokens.PAREN_OPEN);
+                super.emitUnaryOperator(node);
+                write(ASEmitterTokens.PAREN_CLOSE);
+                return;
+            }
 
+        }
+        super.emitUnaryOperator(node);
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6207b3c8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
index 62a6919..c30dcbc 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitterTokens.java
@@ -36,6 +36,10 @@ public enum JSFlexJSEmitterTokens implements IEmitterTokens
     UNDERSCORE("_"),
     IGNORE_COERCION("@flexjsignorecoercion"),
     IGNORE_IMPORT("@flexjsignoreimport"),
+    PREINCREMENT("preincrement"),
+    PREDECREMENT("predecrement"),
+    POSTINCREMENT("postincrement"),
+    POSTDECREMENT("postdecrement"),
     ;
 
     private String token;