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 <aha...@apache.org> Authored: Fri Nov 14 07:58:22 2014 -0800 Committer: Alex Harui <aha...@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;