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;