From a7dd5fab731cbe9b7348474d898ec0a8f20c24d0 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 31 Jul 2018 12:20:53 -0700 Subject: [PATCH 01/15] fix: add allowAwaitOutsideFunction check to parseForStatement --- src/statement.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/statement.js b/src/statement.js index 2968ff0f1..1f9375ab8 100644 --- a/src/statement.js +++ b/src/statement.js @@ -187,7 +187,7 @@ pp.parseDoStatement = function(node) { pp.parseForStatement = function(node) { this.next() - let awaitAt = (this.options.ecmaVersion >= 9 && this.inAsync && this.eatContextual("await")) ? this.lastTokStart : -1 + let awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1 this.labels.push(loopLabel) this.enterLexicalScope() this.expect(tt.parenL) From 2cd1d9af47eaeadca4e7428c66dd87fe43d7f4f2 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sat, 4 Aug 2018 09:18:02 +0200 Subject: [PATCH 02/15] Treat function declarations in modules as lexical Closes #714 --- src/statement.js | 2 +- test/tests-harmony.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/statement.js b/src/statement.js index 1f9375ab8..5950608f6 100644 --- a/src/statement.js +++ b/src/statement.js @@ -498,7 +498,7 @@ pp.parseFunction = function(node, isStatement, allowExpressionBody, isAsync) { if (isStatement) { node.id = isStatement === "nullableID" && this.type !== tt.name ? null : this.parseIdent() if (node.id) { - this.checkLVal(node.id, "var") + this.checkLVal(node.id, this.inModule ? "let" : "var") } } diff --git a/test/tests-harmony.js b/test/tests-harmony.js index 775106fad..5136ff75b 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -16237,3 +16237,5 @@ test('for ([...foo, bar].baz in qux);', { ], "sourceType": "script" }, {ecmaVersion: 6}) + +testFail("var f;\nfunction f() {}", "Identifier 'f' has already been declared (2:9)", {ecmaVersion: 6, sourceType: "module"}); From 08b3426ccd3f40e12eb72a5fe42a3e05a84cc5bc Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 6 Aug 2018 09:18:52 +0200 Subject: [PATCH 03/15] Update test262 whitelist for previous patch --- bin/test262.whitelist | 4 ---- 1 file changed, 4 deletions(-) diff --git a/bin/test262.whitelist b/bin/test262.whitelist index b00d3404e..29d2dcd5d 100644 --- a/bin/test262.whitelist +++ b/bin/test262.whitelist @@ -212,10 +212,6 @@ language/module-code/early-export-global.js (default) language/module-code/early-export-global.js (strict mode) language/module-code/early-export-unresolvable.js (default) language/module-code/early-export-unresolvable.js (strict mode) -language/module-code/parse-err-hoist-lex-fun.js (default) -language/module-code/parse-err-hoist-lex-fun.js (strict mode) -language/module-code/parse-err-hoist-lex-gen.js (default) -language/module-code/parse-err-hoist-lex-gen.js (strict mode) language/statements/async-function/early-errors-declaration-body-contains-super-call.js (default) language/statements/async-function/early-errors-declaration-body-contains-super-call.js (strict mode) language/statements/async-function/early-errors-declaration-body-contains-super-property.js (default) From 3ffe903587b3cf10ef919e78c68324d938561f22 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 6 Aug 2018 10:22:18 +0200 Subject: [PATCH 04/15] Make lexical function decls only kick in at top level Issue #714 --- src/statement.js | 2 +- test/tests-harmony.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/statement.js b/src/statement.js index 5950608f6..7ac77f1b3 100644 --- a/src/statement.js +++ b/src/statement.js @@ -498,7 +498,7 @@ pp.parseFunction = function(node, isStatement, allowExpressionBody, isAsync) { if (isStatement) { node.id = isStatement === "nullableID" && this.type !== tt.name ? null : this.parseIdent() if (node.id) { - this.checkLVal(node.id, this.inModule ? "let" : "var") + this.checkLVal(node.id, this.inModule && !this.inFunction ? "let" : "var") } } diff --git a/test/tests-harmony.js b/test/tests-harmony.js index 5136ff75b..0040e0a51 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -16239,3 +16239,5 @@ test('for ([...foo, bar].baz in qux);', { }, {ecmaVersion: 6}) testFail("var f;\nfunction f() {}", "Identifier 'f' has already been declared (2:9)", {ecmaVersion: 6, sourceType: "module"}); + +test("function f() { var x; function x() {} }", {}, {ecmaVersion: 6, sourceType: "module"}) From 985677400731bb0d3f5c4590233f0ad6c16a460f Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 6 Aug 2018 23:11:31 +0200 Subject: [PATCH 05/15] Disallow async functions under labels Closes #716 --- src/statement.js | 2 +- test/tests-asyncawait.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/statement.js b/src/statement.js index 7ac77f1b3..f37c69c70 100644 --- a/src/statement.js +++ b/src/statement.js @@ -385,7 +385,7 @@ pp.parseLabeledStatement = function(node, maybeName, expr) { node.body = this.parseStatement(true) if (node.body.type === "ClassDeclaration" || node.body.type === "VariableDeclaration" && node.body.kind !== "var" || - node.body.type === "FunctionDeclaration" && (this.strict || node.body.generator)) + node.body.type === "FunctionDeclaration" && (this.strict || node.body.generator || node.body.async)) this.raiseRecoverable(node.body.start, "Invalid labeled declaration") this.labels.pop() node.label = expr diff --git a/test/tests-asyncawait.js b/test/tests-asyncawait.js index 15c1ac206..37723c16d 100644 --- a/test/tests-asyncawait.js +++ b/test/tests-asyncawait.js @@ -3506,3 +3506,5 @@ test( ) test("({ async delete() {} })", {}, {ecmaVersion: 8}) + +testFail("abc: async function a() {}", "Invalid labeled declaration (1:5)", {ecmaVersion: 8}) From bba80abc23ed67337a6502b8b0f22675c4b22303 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 6 Aug 2018 23:41:25 +0200 Subject: [PATCH 06/15] Remove another fixed test from the 262 whitelist --- bin/test262.whitelist | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/test262.whitelist b/bin/test262.whitelist index 29d2dcd5d..c8c6ce4a8 100644 --- a/bin/test262.whitelist +++ b/bin/test262.whitelist @@ -312,7 +312,6 @@ language/statements/if/labelled-fn-stmt-lone.js (default) language/statements/if/labelled-fn-stmt-second.js (default) language/statements/if/let-block-with-newline.js (default) language/statements/if/let-identifier-with-newline.js (default) -language/statements/labeled/decl-async-function.js (default) language/statements/labeled/let-block-with-newline.js (default) language/statements/labeled/let-identifier-with-newline.js (default) language/statements/let/syntax/identifier-let-disallowed-as-boundname.js (default) From 95ca55c7863fafd8bf6d446a0098325388ff9f1c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 24 Aug 2018 08:33:24 +0200 Subject: [PATCH 07/15] Mark version 5.7.2 --- CHANGELOG.md | 10 ++++++++++ package.json | 6 +++++- src/index.js | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 457f48d6b..61b6ba793 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## 5.7.2 (2018-08-24) + +### Bug fixes + +Properly handle `allowAwaitOutsideFunction` in for statements. + +Treat function declarations at the top level of modules like let bindings. + +Don't allow async function declarations as the only statement under a label. + ## 5.7.1 (2018-06-15) ### Bug fixes diff --git a/package.json b/package.json index 0295c029b..80da6501a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "homepage": "https://github.com/acornjs/acorn", "main": "dist/acorn.js", "module": "dist/acorn.es.js", - "version": "5.7.1", + "version": "5.7.2", "engines": { "node": ">=0.4.0" }, @@ -18,6 +18,10 @@ "name": "Ingvar Stepanyan", "email": "me@rreverser.com", "web": "http://rreverser.com/" + }, + { + "name": "Adrian Heine", + "email": "http://adrianheine.de" } ], "repository": { diff --git a/src/index.js b/src/index.js index f988eceab..05b5a4350 100644 --- a/src/index.js +++ b/src/index.js @@ -37,7 +37,7 @@ export {isIdentifierChar, isIdentifierStart} from "./identifier" export {Token} from "./tokenize" export {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from "./whitespace" -export const version = "5.7.1" +export const version = "5.7.2" // The main exported interface (under `self.acorn` when in the // browser) is a `parse` function that takes a code string and From 832c3081da0df0a586cfc3ea96040f64252088b7 Mon Sep 17 00:00:00 2001 From: luckyzeng Date: Sun, 26 Aug 2018 18:40:37 +0800 Subject: [PATCH 08/15] Fix 404 url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 956cd56e2..de53f513f 100644 --- a/README.md +++ b/README.md @@ -464,4 +464,4 @@ looseParser.extend("readToken", function(nextMethod) { - [`acorn5-object-spread`](https://github.com/adrianheine/acorn5-object-spread): Parse [Object Rest/Spread Properties proposal](https://github.com/tc39/proposal-object-rest-spread) - [`acorn-object-rest-spread`](https://github.com/victor-homyakov/acorn-object-rest-spread): Parse [Object Rest/Spread Properties proposal](https://github.com/tc39/proposal-object-rest-spread) - [`acorn-es7`](https://github.com/angelozerr/acorn-es7): Parse [decorator syntax proposal](https://github.com/wycats/javascript-decorators) - - [`acorn-static-class-property-initializer`](https://github.com/victor-homyakov/acorn-static-class-property-initializer): Partial support for static class properties from [ES Class Fields & Static Properties Proposal](https://github.com/tc39/proposal-class-public-fields) to support static property initializers in [React components written as ES6+ classes](https://babeljs.io/blog/2015/06/07/react-on-es6-plus) + - [`acorn-static-class-property-initializer`](https://github.com/victor-homyakov/acorn-static-class-property-initializer): Partial support for static class properties from [ES Class Fields & Static Properties Proposal](https://github.com/tc39/proposal-class-public-fields) to support static property initializers in [React components written as ES6+ classes](https://babeljs.io/blog/2015/07/07/react-on-es6-plus) From 0c12f63f171d8a6c8b354de54a7ff4a8d5fa486e Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 7 Sep 2018 22:19:36 +0200 Subject: [PATCH 09/15] Fix tokenizing of regexps after .of Closes #727 --- src/tokencontext.js | 2 +- test/tests-harmony.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tokencontext.js b/src/tokencontext.js index 5151b3320..6395dd829 100644 --- a/src/tokencontext.js +++ b/src/tokencontext.js @@ -139,7 +139,7 @@ tt.star.updateContext = function(prevType) { tt.name.updateContext = function(prevType) { let allowed = false - if (this.options.ecmaVersion >= 6) { + if (this.options.ecmaVersion >= 6 && prevType != tt.dot) { if (this.value === "of" && !this.exprAllowed || this.value === "yield" && this.inGeneratorContext()) allowed = true diff --git a/test/tests-harmony.js b/test/tests-harmony.js index 0040e0a51..9b6da12be 100644 --- a/test/tests-harmony.js +++ b/test/tests-harmony.js @@ -16241,3 +16241,5 @@ test('for ([...foo, bar].baz in qux);', { testFail("var f;\nfunction f() {}", "Identifier 'f' has already been declared (2:9)", {ecmaVersion: 6, sourceType: "module"}); test("function f() { var x; function x() {} }", {}, {ecmaVersion: 6, sourceType: "module"}) + +test("a.of / 2", {}, {ecmaVersion: 6}) From 1461c7c5778933514126216fb3ec22d8dfc57feb Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 7 Sep 2018 22:33:05 +0200 Subject: [PATCH 10/15] Fix a lint error --- src/tokencontext.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tokencontext.js b/src/tokencontext.js index 6395dd829..6a89c7f9b 100644 --- a/src/tokencontext.js +++ b/src/tokencontext.js @@ -139,7 +139,7 @@ tt.star.updateContext = function(prevType) { tt.name.updateContext = function(prevType) { let allowed = false - if (this.options.ecmaVersion >= 6 && prevType != tt.dot) { + if (this.options.ecmaVersion >= 6 && prevType !== tt.dot) { if (this.value === "of" && !this.exprAllowed || this.value === "yield" && this.inGeneratorContext()) allowed = true From 22b22f36330d41a20225f26aab314d3e9d5452bd Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 10 Sep 2018 10:33:57 +0200 Subject: [PATCH 11/15] Raise specific errors for unterminated template literals Closes #707 --- src/expression.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/expression.js b/src/expression.js index 7ee1ad031..899d57a81 100644 --- a/src/expression.js +++ b/src/expression.js @@ -531,6 +531,7 @@ pp.parseTemplate = function({isTagged = false} = {}) { let curElt = this.parseTemplateElement({isTagged}) node.quasis = [curElt] while (!curElt.tail) { + if (this.type === tt.eof) this.raise(this.pos, "Unterminated template literal") this.expect(tt.dollarBraceL) node.expressions.push(this.parseExpression()) this.expect(tt.braceR) From 3442a80d2cdfa672ae2b6ccd6c2bd5c167914db4 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 10 Sep 2018 10:54:02 +0200 Subject: [PATCH 12/15] Make generate-identifier-regex capable of rewriting src/identifier.js Closes #693 --- bin/generate-identifier-regex.js | 81 +++++++++++++++++--------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/bin/generate-identifier-regex.js b/bin/generate-identifier-regex.js index f02a5b126..07e4540a0 100644 --- a/bin/generate-identifier-regex.js +++ b/bin/generate-identifier-regex.js @@ -1,57 +1,60 @@ 'use strict'; // Which Unicode version should be used? -var pkg = require('../package.json'); -var dependencies = Object.keys(pkg.devDependencies); -var unicodeVersion = dependencies.find((name) => /^unicode-\d/.test(name)); +let pkg = require('../package.json') +let dependencies = Object.keys(pkg.devDependencies) +let unicodeVersion = dependencies.find((name) => /^unicode-\d/.test(name)) -var start = require(unicodeVersion + '/Binary_Property/ID_Start/code-points.js') - .filter(function(ch) { return ch > 0x7f; }); -var last = -1; -var cont = [0x200c, 0x200d].concat(require(unicodeVersion + '/Binary_Property/ID_Continue/code-points.js') - .filter(function(ch) { return ch > 0x7f && search(start, ch, last + 1) === -1; })); +let start = require(unicodeVersion + '/Binary_Property/ID_Start/code-points.js').filter(ch => ch > 0x7f) +let last = -1 +let cont = [0x200c, 0x200d].concat(require(unicodeVersion + '/Binary_Property/ID_Continue/code-points.js') + .filter(ch => ch > 0x7f && search(start, ch, last + 1) === -1)) function search(arr, ch, starting) { - for (var i = starting; arr[i] <= ch && i < arr.length; last = i++) - if (arr[i] === ch) - return i; - return -1; -} - -function pad(str, width) { - while (str.length < width) str = "0" + str; - return str; + for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) + if (arr[i] === ch) return i + return -1 } function esc(code) { - var hex = code.toString(16); - if (hex.length <= 2) return "\\x" + pad(hex, 2); - else return "\\u" + pad(hex, 4); + let hex = code.toString(16) + return hex.length <= 2 ? hex.padStart(2, "0") : "\\u" + hex.padStart(4, "0") } function generate(chars) { - var astral = [], re = ""; - for (var i = 0, at = 0x10000; i < chars.length; i++) { - var from = chars[i], to = from; - while (i < chars.length - 1 && chars[i + 1] === to + 1) { - i++; - to++; - } + let astral = [], re = "" + for (let i = 0, at = 0x10000; i < chars.length; i++) { + let from = chars[i], to = from + while (i < chars.length - 1 && chars[i + 1] === to + 1) {i++; to++} if (to <= 0xffff) { - if (from === to) re += esc(from); - else if (from + 1 === to) re += esc(from) + esc(to); - else re += esc(from) + "-" + esc(to); + if (from === to) re += esc(from) + else if (from + 1 === to) re += esc(from) + esc(to) + else re += esc(from) + "-" + esc(to) } else { - astral.push(from - at, to - from); - at = to; + astral.push(from - at, to - from) + at = to } } - return {nonASCII: re, astral: astral}; + return {nonASCII: re, astral: astral} } -var startData = generate(start), contData = generate(cont); - -console.log("let nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\""); -console.log("let nonASCIIidentifierChars = \"" + contData.nonASCII + "\""); -console.log("const astralIdentifierStartCodes = " + JSON.stringify(startData.astral)); -console.log("const astralIdentifierCodes = " + JSON.stringify(contData.astral)); +let startData = generate(start), contData = generate(cont) + +let code = [ + ` let nonASCIIidentifierStartChars = "${startData.nonASCII}"`, + ` let nonASCIIidentifierChars = "${contData.nonASCII}"`, + ` const astralIdentifierStartCodes = ${JSON.stringify(startData.astral)}`, + ` const astralIdentifierCodes = ${JSON.stringify(contData.astral)}` +] + +if (process.argv.length != 3) { + console.log(code.join("\n")) +} else { + let {readFile} = require('fs') + readFile(process.argv[2], "utf8", function(err, data) { + if (err) throw err + for (let line of code) + data = data.replace(new RegExp(/.* = /.exec(line)[0] + ".*"), line) + process.stdout.write(data) + }) +} From 910e62bbda199ce7acc5de10d374afa0f6fcf7d6 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 10 Sep 2018 11:34:30 +0200 Subject: [PATCH 13/15] Mark version 5.7.3 --- AUTHORS | 2 ++ CHANGELOG.md | 8 ++++++++ package.json | 2 +- src/index.js | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index b605ab4fb..c5ac22cbd 100644 --- a/AUTHORS +++ b/AUTHORS @@ -41,6 +41,7 @@ Kevin Irish Kevin Kwok krator laosb +luckyzeng Marek Marijn Haverbeke Martin Carlberg @@ -63,6 +64,7 @@ PlNG Prayag Verma ReadmeCritic r-e-d +Renée Kooi Richard Gibson Rich Harris Sebastian McKenzie diff --git a/CHANGELOG.md b/CHANGELOG.md index 61b6ba793..226c154fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 5.7.3 (2018-09-10) + +### Bug fixes + +Fix failure to tokenize regexps after expressions like `x.of`. + +Better error message for unterminated template literals. + ## 5.7.2 (2018-08-24) ### Bug fixes diff --git a/package.json b/package.json index 80da6501a..f56ba73c7 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "homepage": "https://github.com/acornjs/acorn", "main": "dist/acorn.js", "module": "dist/acorn.es.js", - "version": "5.7.2", + "version": "5.7.3", "engines": { "node": ">=0.4.0" }, diff --git a/src/index.js b/src/index.js index 05b5a4350..fbe245e33 100644 --- a/src/index.js +++ b/src/index.js @@ -37,7 +37,7 @@ export {isIdentifierChar, isIdentifierStart} from "./identifier" export {Token} from "./tokenize" export {isNewLine, lineBreak, lineBreakG, nonASCIIwhitespace} from "./whitespace" -export const version = "5.7.2" +export const version = "5.7.3" // The main exported interface (under `self.acorn` when in the // browser) is a `parse` function that takes a code string and From fbc15b1344f6dfb992f67b4bbf1357436247c8a0 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sun, 1 Mar 2020 13:32:19 +0100 Subject: [PATCH 14/15] More rigorously check surrogate pairs in regexp validator --- src/regexp.js | 8 +++++--- test/tests-regexp.js | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/regexp.js b/src/regexp.js index c18ee6dc6..3fc34fcf3 100644 --- a/src/regexp.js +++ b/src/regexp.js @@ -48,7 +48,8 @@ export class RegExpValidationState { if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { return c } - return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00 + const next = s.charCodeAt(i + 1) + return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c } nextIndex(i) { @@ -57,8 +58,9 @@ export class RegExpValidationState { if (i >= l) { return l } - const c = s.charCodeAt(i) - if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) { + let c = s.charCodeAt(i), next + if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || + (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) { return i + 1 } return i + 2 diff --git a/test/tests-regexp.js b/test/tests-regexp.js index 6c4719486..804e00a59 100644 --- a/test/tests-regexp.js +++ b/test/tests-regexp.js @@ -1049,6 +1049,7 @@ test("/[\\d][\\12-\\14]{1,}[^\\d]/", {}, { ecmaVersion: 2015 }) testFail("/[\\d][\\12-\\14]{1,}[^\\d]/u", "Invalid regular expression flag (1:1)", { ecmaVersion: 5 }) testFail("/[\\d][\\12-\\14]{1,}[^\\d]/u", "Invalid regular expression: /[\\d][\\12-\\14]{1,}[^\\d]/: Invalid class escape (1:1)", { ecmaVersion: 2015 }) test("/([a ]\\b)*\\b/", {}, { ecmaVersion: 5 }) +test("/[x-*]/u".replace("*", String.fromCharCode(0xd800)), {}, {ecmaVersion: 6}) /* // This is test case generator. From 6370e90067552022710190319cbbbd8c43001957 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 10 Mar 2020 00:24:36 +0100 Subject: [PATCH 15/15] Mark version 5.7.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f56ba73c7..41f858e94 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "homepage": "https://github.com/acornjs/acorn", "main": "dist/acorn.js", "module": "dist/acorn.es.js", - "version": "5.7.3", + "version": "5.7.4", "engines": { "node": ">=0.4.0" },