From 3603f7d0b1d311f99a506549b9024f3e790e68e7 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 8 Oct 2014 11:52:40 +0200 Subject: [PATCH] Adjust start positions of parenthesized expressions to not include parentheses Issue #136 --- acorn.js | 88 +++++++++--------- test/driver.js | 9 +- test/tests-harmony.js | 176 ++++++++++++++++++------------------ test/tests.js | 201 ++++++++---------------------------------- 4 files changed, 174 insertions(+), 300 deletions(-) diff --git a/acorn.js b/acorn.js index 6ac1979e40..8b5cb15aed 100644 --- a/acorn.js +++ b/acorn.js @@ -1236,19 +1236,24 @@ return node; } - // Start a node whose start offset information should be based on - // the start of another node. For example, a binary operator node is - // only started after its left-hand side has already been parsed. + // Sometimes, a node is only started *after* the token stream passed + // its start position. The functions below help storing a position + // and creating a node from a previous position. - function startNodeFrom(other) { - var node = new Node(); - node.start = other.start; + function storeCurrentPos() { + return options.locations ? [tokStart, tokStartLoc] : tokStart; + } + + function startNodeAt(pos) { + var node = new Node(), start = pos; if (options.locations) { node.loc = new SourceLocation(); - node.loc.start = other.loc.start; + node.loc.start = start[1]; + start = pos[0]; } + node.start = start; if (options.ranges) - node.range = [other.range[0], 0]; + node.range = [start, 0]; return node; } @@ -1827,9 +1832,10 @@ // or the `in` operator (in for loops initalization expressions). function parseExpression(noComma, noIn) { + var start = storeCurrentPos(); var expr = parseMaybeAssign(noIn); if (!noComma && tokType === _comma) { - var node = startNodeFrom(expr); + var node = startNodeAt(start); node.expressions = [expr]; while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn)); return finishNode(node, "SequenceExpression"); @@ -1841,9 +1847,10 @@ // operators like `+=`. function parseMaybeAssign(noIn) { + var start = storeCurrentPos(); var left = parseMaybeConditional(noIn); if (tokType.isAssign) { - var node = startNodeFrom(left); + var node = startNodeAt(start); node.operator = tokVal; node.left = tokType === _eq ? toAssignable(left) : left; checkLVal(left); @@ -1857,9 +1864,10 @@ // Parse a ternary conditional (`?:`) operator. function parseMaybeConditional(noIn) { + var start = storeCurrentPos(); var expr = parseExprOps(noIn); if (eat(_question)) { - var node = startNodeFrom(expr); + var node = startNodeAt(start); node.test = expr; node.consequent = parseExpression(true); expect(_colon); @@ -1872,7 +1880,8 @@ // Start the precedence parser. function parseExprOps(noIn) { - return parseExprOp(parseMaybeUnary(), -1, noIn); + var start = storeCurrentPos(); + return parseExprOp(parseMaybeUnary(), start, -1, noIn); } // Parse binary operators with the operator precedence parsing @@ -1881,18 +1890,19 @@ // defer further parser to one of its callers when it encounters an // operator that has a lower precedence than the set it is parsing. - function parseExprOp(left, minPrec, noIn) { + function parseExprOp(left, leftStart, minPrec, noIn) { var prec = tokType.binop; if (prec != null && (!noIn || tokType !== _in)) { if (prec > minPrec) { - var node = startNodeFrom(left); + var node = startNodeAt(leftStart); node.left = left; node.operator = tokVal; var op = tokType; next(); - node.right = parseExprOp(parseMaybeUnary(), prec, noIn); - var exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? "LogicalExpression" : "BinaryExpression"); - return parseExprOp(exprNode, minPrec, noIn); + var start = storeCurrentPos(); + node.right = parseExprOp(parseMaybeUnary(), start, prec, noIn); + finishNode(node, (op === _logicalOR || op === _logicalAND) ? "LogicalExpression" : "BinaryExpression"); + return parseExprOp(node, leftStart, minPrec, noIn); } } return left; @@ -1914,9 +1924,10 @@ raise(node.start, "Deleting local variable in strict mode"); return finishNode(node, update ? "UpdateExpression" : "UnaryExpression"); } + var start = storeCurrentPos(); var expr = parseExprSubscripts(); while (tokType.postfix && !canInsertSemicolon()) { - var node = startNodeFrom(expr); + var node = startNodeAt(start); node.operator = tokVal; node.prefix = false; node.argument = expr; @@ -1930,33 +1941,34 @@ // Parse call, dot, and `[]`-subscript expressions. function parseExprSubscripts() { - return parseSubscripts(parseExprAtom()); + var start = storeCurrentPos(); + return parseSubscripts(parseExprAtom(), start); } - function parseSubscripts(base, noCalls) { + function parseSubscripts(base, start, noCalls) { if (eat(_dot)) { - var node = startNodeFrom(base); + var node = startNodeAt(start); node.object = base; node.property = parseIdent(true); node.computed = false; - return parseSubscripts(finishNode(node, "MemberExpression"), noCalls); + return parseSubscripts(finishNode(node, "MemberExpression"), start, noCalls); } else if (eat(_bracketL)) { - var node = startNodeFrom(base); + var node = startNodeAt(start); node.object = base; node.property = parseExpression(); node.computed = true; expect(_bracketR); - return parseSubscripts(finishNode(node, "MemberExpression"), noCalls); + return parseSubscripts(finishNode(node, "MemberExpression"), start, noCalls); } else if (!noCalls && eat(_parenL)) { - var node = startNodeFrom(base); + var node = startNodeAt(start); node.callee = base; node.arguments = parseExprList(_parenR, false); - return parseSubscripts(finishNode(node, "CallExpression"), noCalls); + return parseSubscripts(finishNode(node, "CallExpression"), start, noCalls); } else if (tokType === _bquote) { - var node = startNodeFrom(base); + var node = startNodeAt(start); node.tag = base; node.quasi = parseTemplate(); - return parseSubscripts(finishNode(node, "TaggedTemplateExpression"), noCalls); + return parseSubscripts(finishNode(node, "TaggedTemplateExpression"), start, noCalls); } return base; } @@ -1976,9 +1988,10 @@ if (inGenerator) return parseYield(); case _name: + var start = storeCurrentPos(); var id = parseIdent(tokType !== _name); if (eat(_arrow)) { - return parseArrowExpression(startNodeFrom(id), [id]); + return parseArrowExpression(startNodeAt(start), [id]); } return id; @@ -1997,11 +2010,12 @@ return finishNode(node, "Literal"); case _parenL: + var start = storeCurrentPos(); var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart, val, exprList; next(); // check whether this is generator comprehension or regular expression if (options.ecmaVersion >= 6 && tokType === _for) { - val = parseComprehension(startNode(), true); + val = parseComprehension(startNodeAt(start), true); } else { var oldParenL = ++metParenL; if (tokType !== _parenR) { @@ -2013,7 +2027,7 @@ expect(_parenR); // if '=>' follows '(...)', convert contents to arguments if (metParenL === oldParenL && eat(_arrow)) { - val = parseArrowExpression(startNode(), exprList); + val = parseArrowExpression(startNodeAt(start), exprList); } else { // forbid '()' before everything but '=>' if (!val) unexpected(lastStart); @@ -2025,15 +2039,6 @@ } } } - val.start = tokStart1; - val.end = lastEnd; - if (options.locations) { - val.loc.start = tokStartLoc1; - val.loc.end = lastEndLoc; - } - if (options.ranges) { - val.range = [tokStart1, lastEnd]; - } return val; case _bracketL: @@ -2078,7 +2083,8 @@ function parseNew() { var node = startNode(); next(); - node.callee = parseSubscripts(parseExprAtom(), true); + var start = storeCurrentPos(); + node.callee = parseSubscripts(parseExprAtom(), start, true); if (eat(_parenL)) node.arguments = parseExprList(_parenR, false); else node.arguments = empty; return finishNode(node, "NewExpression"); diff --git a/test/driver.js b/test/driver.js index 3b1551092a..a08bf6e837 100644 --- a/test/driver.js +++ b/test/driver.js @@ -43,10 +43,9 @@ else callback("ok", test.code); } else { var mis = misMatch(test.ast, ast); + if (!mis && test.comments) mis = misMatch(test.comments, comments); if (mis) callback("fail", test.code, mis); - if (test.comments) mis = misMatch(test.comments, comments); - if (!mis) callback("ok", test.code); - else callback("fail", test.code, mis); + else callback("ok", test.code); } } catch(e) { if (test.error && e instanceof SyntaxError) { @@ -67,7 +66,7 @@ return str + " (" + pt + ")"; } - function misMatch(exp, act) { + var misMatch = exports.misMatch = function(exp, act) { if (!exp || !act || (typeof exp != "object") || (typeof act != "object")) { if (exp !== act) return ppJSON(exp) + " !== " + ppJSON(act); } else if (exp.splice) { @@ -83,7 +82,7 @@ if (mis) return addPath(mis, prop); } } - } + }; function mangle(ast) { if (typeof ast != "object" || !ast) return; diff --git a/test/tests-harmony.js b/test/tests-harmony.js index e0d36665ad..deeb049f65 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -1511,10 +1511,10 @@ test("e => ({ property: 42 })", { end: {line: 1, column: 20} } }], - range: [5, 23], + range: [6, 22], loc: { - start: {line: 1, column: 5}, - end: {line: 1, column: 23} + start: {line: 1, column: 6}, + end: {line: 1, column: 22} } }, rest: null, @@ -2330,10 +2330,10 @@ test("(x => x)", { rest: null, generator: false, expression: true, - range: [0, 8], + range: [1, 7], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 8} + start: {line: 1, column: 1}, + end: {line: 1, column: 7} } }, range: [0, 8], @@ -2500,19 +2500,19 @@ test("(x) => ((y, z) => (x, y, z))", { } } ], - range: [18, 27], + range: [19, 26], loc: { - start: {line: 1, column: 18}, - end: {line: 1, column: 27} + start: {line: 1, column: 19}, + end: {line: 1, column: 26} } }, rest: null, generator: false, expression: true, - range: [7, 28], + range: [8, 27], loc: { - start: {line: 1, column: 7}, - end: {line: 1, column: 28} + start: {line: 1, column: 8}, + end: {line: 1, column: 27} } }, rest: null, @@ -4268,10 +4268,10 @@ test("({ responseText: text }) = res", { end: {line: 1, column: 21} } }], - range: [0, 24], + range: [1, 23], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 24} + start: {line: 1, column: 1}, + end: {line: 1, column: 23} } }, right: { @@ -6115,10 +6115,10 @@ test("(function* () { yield v })", { rest: null, generator: true, expression: false, - range: [0, 26], + range: [1, 25], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 26} + start: {line: 1, column: 1}, + end: {line: 1, column: 25} } }, range: [0, 26], @@ -6195,10 +6195,10 @@ test("(function* () { yield\nv })", { rest: null, generator: true, expression: false, - range: [0, 26], + range: [1, 25], loc: { - start: {line: 1, column: 0}, - end: {line: 2, column: 4} + start: {line: 1, column: 1}, + end: {line: 2, column: 3} } }, range: [0, 26], @@ -6264,10 +6264,10 @@ test("(function* () { yield *v })", { rest: null, generator: true, expression: false, - range: [0, 27], + range: [1, 26], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 27} + start: {line: 1, column: 1}, + end: {line: 1, column: 26} } }, range: [0, 27], @@ -6572,10 +6572,10 @@ test("(function* () { yield yield 10 })", { rest: null, generator: true, expression: false, - range: [0, 33], + range: [1, 32], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 33} + start: {line: 1, column: 1}, + end: {line: 1, column: 32} } }, range: [0, 33], @@ -8138,10 +8138,10 @@ test("\"use strict\"; (class A {constructor() { super() }})", { end: {line: 1, column: 50} } }, - range: [14, 51], + range: [15, 50], loc: { - start: {line: 1, column: 14}, - end: {line: 1, column: 51} + start: {line: 1, column: 15}, + end: {line: 1, column: 50} } }, range: [14, 51], @@ -8482,10 +8482,10 @@ test("\"use strict\"; (class A { static constructor() { super() }})", { end: {line: 1, column: 58} } }, - range: [14, 59], + range: [15, 58], loc: { - start: {line: 1, column: 14}, - end: {line: 1, column: 59} + start: {line: 1, column: 15}, + end: {line: 1, column: 58} } }, range: [14, 59], @@ -9437,10 +9437,10 @@ test("({[x]: 10})", { end: {line: 1, column: 9} } }], - range: [0, 11], + range: [1, 10], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 11} + start: {line: 1, column: 1}, + end: {line: 1, column: 10} } }, range: [0, 11], @@ -9517,10 +9517,10 @@ test("({[\"x\" + \"y\"]: 10})", { end: {line: 1, column: 17} } }], - range: [0, 19], + range: [1, 18], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 19} + start: {line: 1, column: 1}, + end: {line: 1, column: 18} } }, range: [0, 19], @@ -9590,10 +9590,10 @@ test("({[x]: function() {}})", { end: {line: 1, column: 20} } }], - range: [0, 22], + range: [1, 21], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 22} + start: {line: 1, column: 1}, + end: {line: 1, column: 21} } }, range: [0, 22], @@ -9683,10 +9683,10 @@ test("({[x]: 10, y: 20})", { } } ], - range: [0, 18], + range: [1, 17], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 18} + start: {line: 1, column: 1}, + end: {line: 1, column: 17} } }, range: [0, 18], @@ -9810,10 +9810,10 @@ test("({get [x]() {}, set [x](v) {}})", { } } ], - range: [0, 31], + range: [1, 30], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 31} + start: {line: 1, column: 1}, + end: {line: 1, column: 30} } }, range: [0, 31], @@ -9883,10 +9883,10 @@ test("({[x]() {}})", { end: {line: 1, column: 10} } }], - range: [0, 12], + range: [1, 11], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 12} + start: {line: 1, column: 1}, + end: {line: 1, column: 11} } }, range: [0, 12], @@ -10769,10 +10769,10 @@ test("({f: function({x} = {x: 10}) {}})", { end: {line: 1, column: 31} } }], - range: [0, 33], + range: [1, 32], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 33} + start: {line: 1, column: 1}, + end: {line: 1, column: 32} } }, range: [0, 33], @@ -10917,10 +10917,10 @@ test("({f({x} = {x: 10}) {}})", { end: {line: 1, column: 21} } }], - range: [0, 23], + range: [1, 22], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 23} + start: {line: 1, column: 1}, + end: {line: 1, column: 22} } }, range: [0, 23], @@ -11073,10 +11073,10 @@ test("(class {f({x} = {x: 10}) {}})", { end: {line: 1, column: 28} } }, - range: [0, 29], + range: [1, 28], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 29} + start: {line: 1, column: 1}, + end: {line: 1, column: 28} } }, range: [0, 29], @@ -11192,10 +11192,10 @@ test("(({x} = {x: 10}) => {})", { rest: null, generator: false, expression: false, - range: [0, 23], + range: [1, 22], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 23} + start: {line: 1, column: 1}, + end: {line: 1, column: 22} } }, range: [0, 23], @@ -12267,10 +12267,10 @@ test("(function x([ a, b ]){})", { rest: null, generator: false, expression: false, - range: [0, 24], + range: [1, 23], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 24} + start: {line: 1, column: 1}, + end: {line: 1, column: 23} } }, range: [0, 24], @@ -12388,10 +12388,10 @@ test("(function x({ a, b }){})", { rest: null, generator: false, expression: false, - range: [0, 24], + range: [1, 23], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 24} + start: {line: 1, column: 1}, + end: {line: 1, column: 23} } }, range: [0, 24], @@ -12467,10 +12467,10 @@ test("(function x(...[ a, b ]){})", { }, generator: false, expression: false, - range: [0, 27], + range: [1, 26], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 27} + start: {line: 1, column: 1}, + end: {line: 1, column: 26} } }, range: [0, 27], @@ -12704,10 +12704,10 @@ test("(function x({ a: { w, x }, b: [y, z] }, ...[a, b, c]){})", { }, generator: false, expression: false, - range: [0, 56], + range: [1, 55], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 56} + start: {line: 1, column: 1}, + end: {line: 1, column: 55} } }, range: [0, 56], @@ -12804,10 +12804,10 @@ test("({ x([ a, b ]){} })", { end: {line: 1, column: 16} } }], - range: [0, 19], + range: [1, 18], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 19} + start: {line: 1, column: 1}, + end: {line: 1, column: 18} } }, range: [0, 19], @@ -12904,10 +12904,10 @@ test("({ x(...[ a, b ]){} })", { end: {line: 1, column: 19} } }], - range: [0, 22], + range: [1, 21], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 22} + start: {line: 1, column: 1}, + end: {line: 1, column: 21} } }, range: [0, 22], @@ -13162,10 +13162,10 @@ test("({ x({ a: { w, x }, b: [y, z] }, ...[a, b, c]){} })", { end: {line: 1, column: 48} } }], - range: [0, 51], + range: [1, 50], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 51} + start: {line: 1, column: 1}, + end: {line: 1, column: 50} } }, range: [0, 51], @@ -15086,10 +15086,10 @@ test("(function () { yield* 10 })", { rest: null, generator: false, expression: false, - range: [0, 27], + range: [1, 26], loc: { - start: {line: 1, column: 0}, - end: {line: 1, column: 27} + start: {line: 1, column: 1}, + end: {line: 1, column: 26} } }, range: [0, 27], @@ -15388,4 +15388,4 @@ test('function normal(x, y = 10) {}', { }, expression: false }] -}, {ecmaVersion: 6}); \ No newline at end of file +}, {ecmaVersion: 6}); diff --git a/test/tests.js b/test/tests.js index c39aa3cde6..5a86572a93 100644 --- a/test/tests.js +++ b/test/tests.js @@ -2,9 +2,8 @@ // (http://esprima.org/test/) if (typeof exports != "undefined") { - var test = require("./driver.js").test; - var testFail = require("./driver.js").testFail; - var testAssert = require("./driver.js").testAssert; + var driver = require("./driver.js"); + var test = driver.test, testFail = driver.testFail, testAssert = driver.testAssert, misMatch = driver.misMatch; var acorn = require(".."); } @@ -177,11 +176,11 @@ test("(1 + 2 ) * 3", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 8 + column: 6 } } }, @@ -8202,11 +8201,11 @@ test("( new foo).bar()", { loc: { start: { line: 1, - column: 0 + column: 2 }, end: { line: 1, - column: 10 + column: 9 } } }, @@ -8371,11 +8370,11 @@ test("( foo )()", { loc: { start: { line: 1, - column: 0 + column: 5 }, end: { line: 1, - column: 11 + column: 8 } } }, @@ -17217,11 +17216,11 @@ test("if (morning) (function(){})", { loc: { start: { line: 1, - column: 13 + column: 14 }, end: { line: 1, - column: 27 + column: 26 } } }, @@ -20508,11 +20507,11 @@ test("(function(){ return })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 22 + column: 21 } } }, @@ -20581,11 +20580,11 @@ test("(function(){ return; })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 23 + column: 22 } } }, @@ -20667,11 +20666,11 @@ test("(function(){ return x; })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 25 + column: 24 } } }, @@ -20781,11 +20780,11 @@ test("(function(){ return x * y })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 28 + column: 27 } } }, @@ -23194,11 +23193,11 @@ test("(function test(t, t) { })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 25 + column: 24 } } }, @@ -24412,11 +24411,11 @@ test("(function(){})", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 1, - column: 14 + column: 13 } } }, @@ -25522,11 +25521,11 @@ test("(function(){ return\nx; })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 2, - column: 5 + column: 4 } } }, @@ -25622,11 +25621,11 @@ test("(function(){ return // Comment\nx; })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 2, - column: 5 + column: 4 } } }, @@ -25722,11 +25721,11 @@ test("(function(){ return/* Multiline\nComment */x; })", { loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 2, - column: 15 + column: 14 } } }, @@ -26026,8 +26025,6 @@ test("", { test("foo: if (true) break foo;", { type: "Program", - start: 0, - end: 25, loc: { start: { line: 1, @@ -26041,8 +26038,6 @@ test("foo: if (true) break foo;", { body: [ { type: "LabeledStatement", - start: 0, - end: 25, loc: { start: { line: 1, @@ -26055,8 +26050,6 @@ test("foo: if (true) break foo;", { }, body: { type: "IfStatement", - start: 5, - end: 25, loc: { start: { line: 1, @@ -26069,8 +26062,6 @@ test("foo: if (true) break foo;", { }, test: { type: "Literal", - start: 9, - end: 13, loc: { start: { line: 1, @@ -26085,8 +26076,6 @@ test("foo: if (true) break foo;", { }, consequent: { type: "BreakStatement", - start: 15, - end: 25, loc: { start: { line: 1, @@ -26099,8 +26088,6 @@ test("foo: if (true) break foo;", { }, label: { type: "Identifier", - start: 21, - end: 24, loc: { start: { line: 1, @@ -26118,8 +26105,6 @@ test("foo: if (true) break foo;", { }, label: { type: "Identifier", - start: 0, - end: 3, loc: { start: { line: 1, @@ -26138,8 +26123,6 @@ test("foo: if (true) break foo;", { test("(function () {\n 'use strict';\n '\0';\n}())", { type: "Program", - start: 0, - end: 40, loc: { start: { line: 1, @@ -26153,8 +26136,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { body: [ { type: "ExpressionStatement", - start: 0, - end: 40, loc: { start: { line: 1, @@ -26167,21 +26148,18 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { }, expression: { type: "CallExpression", - start: 0, loc: { start: { line: 1, - column: 0 + column: 1 }, end: { line: 4, - column: 4 + column: 3 } }, callee: { type: "FunctionExpression", - start: 1, - end: 37, loc: { start: { line: 1, @@ -26196,8 +26174,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { params: [], body: { type: "BlockStatement", - start: 13, - end: 37, loc: { start: { line: 1, @@ -26211,8 +26187,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { body: [ { type: "ExpressionStatement", - start: 16, - end: 29, loc: { start: { line: 2, @@ -26225,8 +26199,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { }, expression: { type: "Literal", - start: 16, - end: 28, loc: { start: { line: 2, @@ -26242,8 +26214,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { }, { type: "ExpressionStatement", - start: 31, - end: 35, loc: { start: { line: 3, @@ -26256,8 +26226,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { }, expression: { type: "Literal", - start: 31, - end: 34, loc: { start: { line: 3, @@ -26275,7 +26243,6 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { } }, arguments: [], - end: 40 } } ] @@ -26283,43 +26250,29 @@ test("(function () {\n 'use strict';\n '\0';\n}())", { test("123..toString(10)", { type: "Program", - start: 0, - end: 17, body: [ { type: "ExpressionStatement", - start: 0, - end: 17, expression: { type: "CallExpression", - start: 0, callee: { type: "MemberExpression", - start: 0, object: { type: "Literal", - start: 0, - end: 4, value: 123 }, property: { type: "Identifier", - start: 5, - end: 13, name: "toString" }, computed: false, - end: 13 }, arguments: [ { type: "Literal", - start: 14, - end: 16, value: 10 } ], - end: 17 } } ] @@ -26327,30 +26280,20 @@ test("123..toString(10)", { test("123.+2", { type: "Program", - start: 0, - end: 6, body: [ { type: "ExpressionStatement", - start: 0, - end: 6, expression: { type: "BinaryExpression", - start: 0, left: { type: "Literal", - start: 0, - end: 4, value: 123 }, operator: "+", right: { type: "Literal", - start: 5, - end: 6, value: 2 }, - end: 6 } } ] @@ -26358,28 +26301,18 @@ test("123.+2", { test("a\u2028b", { type: "Program", - start: 0, - end: 3, body: [ { type: "ExpressionStatement", - start: 0, - end: 1, expression: { type: "Identifier", - start: 0, - end: 1, name: "a" } }, { type: "ExpressionStatement", - start: 2, - end: 3, expression: { type: "Identifier", - start: 2, - end: 3, name: "b" } } @@ -26437,28 +26370,18 @@ test("foo: 10; foo: 20;", { test("if(1)/ foo/", { type: "Program", - start: 0, - end: 12, body: [ { type: "IfStatement", - start: 0, - end: 12, test: { type: "Literal", - start: 3, - end: 4, value: 1, raw: "1" }, consequent: { type: "ExpressionStatement", - start: 5, - end: 12, expression: { type: "Literal", - start: 5, - end: 12, raw: "/ foo/" } }, @@ -26475,8 +26398,6 @@ test("price_9̶9̶_89", { expression: { type: "Identifier", name: "price_9̶9̶_89", - start: 0, - end: 13 } } ] @@ -26486,8 +26407,6 @@ test("price_9̶9̶_89", { test("var a = 1;", { type: "Program", - start: 0, - end: 10, loc: { start: { line: 1, @@ -26502,8 +26421,6 @@ test("var a = 1;", { body: [ { type: "VariableDeclaration", - start: 0, - end: 10, loc: { start: { line: 1, @@ -26518,8 +26435,6 @@ test("var a = 1;", { declarations: [ { type: "VariableDeclarator", - start: 4, - end: 9, loc: { start: { line: 1, @@ -26533,8 +26448,6 @@ test("var a = 1;", { }, id: { type: "Identifier", - start: 4, - end: 5, loc: { start: { line: 1, @@ -26550,8 +26463,6 @@ test("var a = 1;", { }, init: { type: "Literal", - start: 8, - end: 9, loc: { start: { line: 1, @@ -26624,28 +26535,18 @@ test("{}/=/", { test("foo