emit source map for ternary operator
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e89e3756 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e89e3756 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e89e3756 Branch: refs/heads/develop Commit: e89e3756db4d404d8ecface3e252a10f46c37909 Parents: 673e088 Author: Josh Tynjala <[email protected]> Authored: Wed Mar 30 15:09:34 2016 -0700 Committer: Josh Tynjala <[email protected]> Committed: Wed Mar 30 15:09:34 2016 -0700 ---------------------------------------------------------------------- .../compiler/internal/codegen/js/JSEmitter.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e89e3756/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java index 72ceae9..aae2cfd 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java @@ -49,15 +49,18 @@ import org.apache.flex.compiler.tree.as.ILiteralContainerNode; import org.apache.flex.compiler.tree.as.ILiteralNode; import org.apache.flex.compiler.tree.as.INumericLiteralNode; import org.apache.flex.compiler.tree.as.IObjectLiteralValuePairNode; +import org.apache.flex.compiler.tree.as.IOperatorNode; import org.apache.flex.compiler.tree.as.IPackageNode; import org.apache.flex.compiler.tree.as.IParameterNode; import org.apache.flex.compiler.tree.as.IReturnNode; import org.apache.flex.compiler.tree.as.ITerminalNode; +import org.apache.flex.compiler.tree.as.ITernaryOperatorNode; import org.apache.flex.compiler.tree.as.ITypeNode; import org.apache.flex.compiler.tree.as.ITypedExpressionNode; import org.apache.flex.compiler.tree.as.IUnaryOperatorNode; import org.apache.flex.compiler.tree.as.IVariableNode; import org.apache.flex.compiler.tree.as.IWhileLoopNode; +import org.apache.flex.compiler.utils.ASNodeUtils; import org.apache.flex.compiler.visitor.IBlockWalker; import com.google.debugging.sourcemap.FilePosition; @@ -374,6 +377,34 @@ public class JSEmitter extends ASEmitter implements IJSEmitter } @Override + public void emitTernaryOperator(ITernaryOperatorNode node) + { + if (ASNodeUtils.hasParenOpen((IOperatorNode) node)) + write(ASEmitterTokens.PAREN_OPEN); + + IExpressionNode conditionalNode = node.getConditionalNode(); + getWalker().walk(conditionalNode); + + startMapping(node, conditionalNode.getAbsoluteEnd() - node.getAbsoluteStart()); + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.TERNARY); + endMapping(node); + + IExpressionNode leftOperandNode = node.getLeftOperandNode(); + getWalker().walk(leftOperandNode); + + startMapping(node, leftOperandNode.getAbsoluteEnd() - node.getAbsoluteStart()); + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.COLON); + endMapping(node); + + getWalker().walk(node.getRightOperandNode()); + + if (ASNodeUtils.hasParenClose((IOperatorNode) node)) + write(ASEmitterTokens.PAREN_CLOSE); + } + + @Override public void emitWhileLoop(IWhileLoopNode node) { IContainerNode cnode = (IContainerNode) node.getChild(1);
