cleaned up some parts of the source map to include things like commas and parentheses, moved assignment operator out of assigned value because it's not in the source location of that node, but before it (and that made it possible to source map it)
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/109b56b8 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/109b56b8 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/109b56b8 Branch: refs/heads/develop Commit: 109b56b894ac8572dbb1e4251641a7f87b9df065 Parents: ad6f1d0 Author: Josh Tynjala <[email protected]> Authored: Sat Mar 26 17:36:48 2016 -0700 Committer: Josh Tynjala <[email protected]> Committed: Sat Mar 26 17:36:48 2016 -0700 ---------------------------------------------------------------------- .../codegen/js/goog/TestGoogGlobalClasses.java | 2 +- .../js/goog/TestGoogGlobalFunctions.java | 2 +- .../compiler/internal/codegen/as/ASEmitter.java | 25 +++++-- .../compiler/internal/codegen/js/JSEmitter.java | 49 ++++++++++++-- .../internal/codegen/js/JSEmitterTokens.java | 3 +- .../codegen/js/flexjs/JSFlexJSEmitter.java | 7 -- .../internal/codegen/js/goog/JSGoogEmitter.java | 70 +++++++++----------- .../codegen/js/jx/FunctionCallEmitter.java | 6 +- .../codegen/js/jx/VarDeclarationEmitter.java | 8 ++- .../codegen/js/vf2js/JSVF2JSEmitter.java | 6 +- 10 files changed, 114 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java index 1bbdf55..fc9e523 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalClasses.java @@ -271,7 +271,7 @@ public class TestGoogGlobalClasses extends TestGlobalClasses { IVariableNode node = getVariable("var a:Vector.<String> = new Vector.<String>(['Hello', 'World']);"); asBlockWalker.visitVariable(node); - assertOut("var /** @type {Vector.<string>} */ a = new Vector(['Hello', 'World'])"); + assertOut("var /** @type {Vector.<string>} */ a = new Array(['Hello', 'World'])"); } @Override http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java ---------------------------------------------------------------------- diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java index 79acf92..614edd5 100644 --- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java +++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/goog/TestGoogGlobalFunctions.java @@ -209,7 +209,7 @@ public class TestGoogGlobalFunctions extends TestGlobalFunctions { IVariableNode node = getVariable("var a:Vector.<String> = Vector.<String>(['Hello', 'World']);"); asBlockWalker.visitVariable(node); - assertOut("var /** @type {Vector.<string>} */ a = Vector(['Hello', 'World'])"); + assertOut("var /** @type {Vector.<string>} */ a = Array(['Hello', 'World'])"); } @Override http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/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 14ae6c5..47f633b 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 @@ -523,7 +523,14 @@ public class ASEmitter implements IASEmitter, IEmitter emitDeclarationName(node); emitType(node.getVariableTypeNode()); - emitAssignedValue(node.getAssignedValueNode()); + + IExpressionNode avnode = node.getAssignedValueNode(); + if (avnode != null) + { + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); + emitAssignedValue(avnode); + } if (!(node instanceof ChainedVariableNode)) { @@ -570,7 +577,14 @@ public class ASEmitter implements IASEmitter, IEmitter emitMemberName(node); emitType(node.getVariableTypeNode()); - emitAssignedValue(node.getAssignedValueNode()); + + IExpressionNode avnode = node.getAssignedValueNode(); + if (avnode != null) + { + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); + emitAssignedValue(avnode); + } if (!(node instanceof ChainedVariableNode)) { @@ -810,12 +824,11 @@ public class ASEmitter implements IASEmitter, IEmitter protected void emitAssignedValue(IExpressionNode node) { - if (node != null) + if (node == null) { - write(ASEmitterTokens.SPACE); - writeToken(ASEmitterTokens.EQUAL); - getWalker().walk(node); + return; } + getWalker().walk(node); } @Override http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/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 c830f73..d510230 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 @@ -33,7 +33,6 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitter; import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens; import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils; import org.apache.flex.compiler.internal.projects.FlexJSProject; -import org.apache.flex.compiler.internal.tree.as.ContainerNode; import org.apache.flex.compiler.internal.tree.as.FunctionNode; import org.apache.flex.compiler.tree.ASTNodeID; import org.apache.flex.compiler.tree.as.IASNode; @@ -44,11 +43,14 @@ import org.apache.flex.compiler.tree.as.IFunctionNode; import org.apache.flex.compiler.tree.as.IFunctionObjectNode; import org.apache.flex.compiler.tree.as.IKeywordNode; 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.IPackageNode; import org.apache.flex.compiler.tree.as.IParameterNode; import org.apache.flex.compiler.tree.as.IReturnNode; import org.apache.flex.compiler.tree.as.ITypeNode; +import org.apache.flex.compiler.tree.as.ITypedExpressionNode; import org.apache.flex.compiler.tree.as.IVariableNode; import org.apache.flex.compiler.visitor.IBlockWalker; @@ -222,7 +224,7 @@ public class JSEmitter extends ASEmitter implements IJSEmitter getWalker().walk(child); if (i < len - 1) { - startMapping(node); + startMapping(node, child.getAbsoluteEnd() - node.getAbsoluteStart() + 1); writeToken(ASEmitterTokens.COMMA); endMapping(node); } @@ -230,27 +232,62 @@ public class JSEmitter extends ASEmitter implements IJSEmitter if (postFix != null) { - startMapping(node); + startMapping(node, node.getAbsoluteEnd() - node.getAbsoluteStart()); write(postFix); endMapping(node); } } @Override + public void emitObjectLiteralValuePair(IObjectLiteralValuePairNode node) + { + ISourceLocation sourceLocationNode = (ISourceLocation) node; + + IExpressionNode nameNode = node.getNameNode(); + if (!(nameNode instanceof ILiteralNode)) + { + startMapping(nameNode); + } + getWalker().walk(node.getNameNode()); + if (!(nameNode instanceof ILiteralNode)) + { + endMapping(nameNode); + } + + startMapping(sourceLocationNode, nameNode.getAbsoluteEnd() - sourceLocationNode.getAbsoluteStart()); + write(ASEmitterTokens.COLON); + endMapping(sourceLocationNode); + + getWalker().walk(node.getValueNode()); + } + + @Override public void emitReturn(IReturnNode node) { + IExpressionNode rnode = node.getReturnValueNode(); + boolean hasReturnValue = rnode != null && rnode.getNodeID() != ASTNodeID.NilID; + startMapping(node); write(ASEmitterTokens.RETURN); - endMapping(node); - IExpressionNode rnode = node.getReturnValueNode(); - if (rnode != null && rnode.getNodeID() != ASTNodeID.NilID) + if (hasReturnValue) { write(ASEmitterTokens.SPACE); + } + endMapping(node); + + if (hasReturnValue) + { getWalker().walk(rnode); } } @Override + public void emitTypedExpression(ITypedExpressionNode node) + { + write(JSEmitterTokens.ARRAY); + } + + @Override public void emitMemberKeyword(IDefinitionNode node) { IKeywordNode keywordNode = null; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java index ab8d079..82935af 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitterTokens.java @@ -30,7 +30,8 @@ public enum JSEmitterTokens implements IEmitterTokens DEFINE_PROPERTIES("defineProperties"), INTERFACE("interface"), PROTOTYPE("prototype"), - SLICE("slice"); + SLICE("slice"), + ARRAY("Array"); private String token; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/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 94e1d5e..355250f 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 @@ -87,7 +87,6 @@ import org.apache.flex.compiler.tree.as.INamespaceNode; import org.apache.flex.compiler.tree.as.IPackageNode; import org.apache.flex.compiler.tree.as.IScopedNode; import org.apache.flex.compiler.tree.as.ISetterNode; -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.utils.ASNodeUtils; @@ -622,12 +621,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter } @Override - public void emitTypedExpression(ITypedExpressionNode node) - { - write(JSGoogEmitterTokens.ARRAY); - } - - @Override public void emitIdentifier(IIdentifierNode node) { identifierEmitter.emit(node); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java index 6e7d555..bc48f83 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java @@ -70,7 +70,6 @@ import org.apache.flex.compiler.tree.as.INamespaceAccessExpressionNode; import org.apache.flex.compiler.tree.as.IParameterNode; import org.apache.flex.compiler.tree.as.ISetterNode; import org.apache.flex.compiler.tree.as.ITypeNode; -import org.apache.flex.compiler.tree.as.ITypedExpressionNode; import org.apache.flex.compiler.tree.as.IVariableExpressionNode; import org.apache.flex.compiler.tree.as.IVariableNode; import org.apache.flex.compiler.utils.ASNodeUtils; @@ -422,8 +421,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter } emitDeclarationName(node); - if (!(avnode instanceof IEmbedNode)) + if (avnode != null && !(avnode instanceof IEmbedNode)) + { + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); emitAssignedValue(avnode); + } if (!(node instanceof ChainedVariableNode)) { @@ -881,49 +884,42 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter @Override public void emitAssignedValue(IExpressionNode node) { - if (node != null) + if (node == null) { - write(ASEmitterTokens.SPACE); - writeToken(ASEmitterTokens.EQUAL); - IDefinition definition = node.resolve(getWalker().getProject()); - if (node.getNodeID() == ASTNodeID.ClassReferenceID) + return; + } + IDefinition definition = node.resolve(getWalker().getProject()); + if (node.getNodeID() == ASTNodeID.ClassReferenceID) + { + write(definition.getQualifiedName()); + } + else + { + // AJH need Language.bind here and maybe not require + // that the node is a MemberAccessExpression + if (definition instanceof FunctionDefinition && + !((FunctionDefinition)definition).isStatic() && + (!(definition instanceof AccessorDefinition)) && + node instanceof MemberAccessExpressionNode) { - write(definition.getQualifiedName()); + emitClosureStart(); + getWalker().walk(node); + writeToken(ASEmitterTokens.COMMA); + getWalker().walk(((MemberAccessExpressionNode)node).getLeftOperandNode()); + emitClosureEnd(((MemberAccessExpressionNode)node).getLeftOperandNode()); } - else + else if (node.getNodeID() == ASTNodeID.XMLContentID) { - // AJH need Language.bind here and maybe not require - // that the node is a MemberAccessExpression - if (definition instanceof FunctionDefinition && - !((FunctionDefinition)definition).isStatic() && - (!(definition instanceof AccessorDefinition)) && - node instanceof MemberAccessExpressionNode) - { - emitClosureStart(); - getWalker().walk(node); - writeToken(ASEmitterTokens.COMMA); - getWalker().walk(((MemberAccessExpressionNode)node).getLeftOperandNode()); - emitClosureEnd(((MemberAccessExpressionNode)node).getLeftOperandNode()); - } - else if (node.getNodeID() == ASTNodeID.XMLContentID) - { - write("new XML"); - writeToken(ASEmitterTokens.PAREN_OPEN); - getWalker().walk(node); - writeToken(ASEmitterTokens.PAREN_CLOSE); - } - else - getWalker().walk(node); + write("new XML"); + writeToken(ASEmitterTokens.PAREN_OPEN); + getWalker().walk(node); + writeToken(ASEmitterTokens.PAREN_CLOSE); } + else + getWalker().walk(node); } } - @Override - public void emitTypedExpression(ITypedExpressionNode node) - { - getWalker().walk(node.getCollectionNode()); - } - // XXX Dead @Override public void emitForEachLoop(IForLoopNode node) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java index 5f590e1..9c4d225 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java @@ -104,16 +104,16 @@ public class FunctionCallEmitter extends JSSubEmitter implements ISubEmitter<IFu if (node.isNewExpression()) { def = node.resolveCalledExpression(getProject()); + IExpressionNode nameNode = node.getNameNode(); // all new calls to a class should be fully qualified names if (def instanceof ClassDefinition) { - getEmitter().startMapping(node); + getEmitter().startMapping(nameNode); write(getEmitter().formatQualifiedName(def.getQualifiedName())); - getEmitter().endMapping(node); + getEmitter().endMapping(nameNode); } else { - IExpressionNode nameNode = node.getNameNode(); // wrap "new someFunctionCall(args)" in parens so the // function call gets parsed and evaluated before new // otherwise it just looks like any other "new function" http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java index b945282..3829b68 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java @@ -79,8 +79,14 @@ public class VarDeclarationEmitter extends JSSubEmitter implements } fjs.emitDeclarationName(node); - if (!(avnode instanceof IEmbedNode)) + if (avnode != null && !(avnode instanceof IEmbedNode)) + { + getEmitter().startMapping(node, node.getVariableTypeNode().getEnd() - node.getStart()); + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); + getEmitter().endMapping(node); fjs.emitAssignedValue(avnode); + } if (!(node instanceof ChainedVariableNode)) { http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/109b56b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java ---------------------------------------------------------------------- diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java index fceccc2..0eb2a78 100644 --- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java +++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java @@ -350,8 +350,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter } emitDeclarationName(node); - if (!(avnode instanceof IEmbedNode)) + if (avnode != null && !(avnode instanceof IEmbedNode)) + { + write(ASEmitterTokens.SPACE); + writeToken(ASEmitterTokens.EQUAL); emitAssignedValue(avnode); + } if (!(node instanceof ChainedVariableNode)) {
