Generated source map for JS function's closing curly bracket

This commit is contained in:
Alexey Andreev
2017-06-22 18:39:59 +03:00
parent 4e18ea2d04
commit 1e74325c52
57 changed files with 113 additions and 63 deletions
@@ -208,6 +208,7 @@ public class Parser extends Observable {
int savedFunctionNumber = functionNumber;
Node args;
Node body;
CodePosition closingBracketPosition;
try {
functionNumber = 0;
args = nf.createLeaf(TokenStream.LP, ts.tokenPosition);
@@ -226,6 +227,7 @@ public class Parser extends Observable {
mustMatchToken(ts, TokenStream.LC, "msg.no.brace.body");
body = parseFunctionBody(ts);
closingBracketPosition = ts.tokenPosition;
mustMatchToken(ts, TokenStream.RC, "msg.no.brace.after.body");
// skip the last EOL so nested functions work...
}
@@ -234,7 +236,7 @@ public class Parser extends Observable {
functionNumber = savedFunctionNumber;
}
Node pn = nf.createFunction(nameNode, args, body, basePosition);
Node pn = nf.createFunction(nameNode, args, body, closingBracketPosition);
if (memberExprNode != null) {
pn = nf.createBinary(TokenStream.ASSIGN, TokenStream.NOP, memberExprNode, pn, basePosition);
}
@@ -100,6 +100,12 @@ class SourceMapLocationRemapper(private val sourceMap: SourceMap) {
override fun visitInvocation(invocation: JsInvocation) =
handleNode(invocation, invocation.qualifier, *invocation.arguments.toTypedArray())
override fun visitFunction(x: JsFunction) {
x.parameters.forEach { accept(it) }
x.body.statements.forEach { accept(it) }
nodeList += x
}
override fun visitElement(node: JsNode) {
nodeList += node
node.acceptChildren(this)