From dcef4012a0a67e5d66e819ee0a0cf4ebde2fc58b Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Wed, 17 May 2017 11:07:09 -0500 Subject: [PATCH] Disallow SpreadElement inside dynamic import (#529) * Disallow SpreadElement inside dynamic import * tweak error message --- src/parser/expression.js | 11 +++++++++-- .../dynamic-import/invalid-arguments-spread/actual.js | 1 + .../invalid-arguments-spread/options.json | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/experimental/dynamic-import/invalid-arguments-spread/actual.js create mode 100644 test/fixtures/experimental/dynamic-import/invalid-arguments-spread/options.json diff --git a/src/parser/expression.js b/src/parser/expression.js index 23f6875077..5d08afd31b 100644 --- a/src/parser/expression.js +++ b/src/parser/expression.js @@ -314,8 +314,15 @@ export default class ExpressionParser extends LValParser { const node = this.startNodeAt(startPos, startLoc); node.callee = base; node.arguments = this.parseCallExpressionArguments(tt.parenR, possibleAsync); - if (node.callee.type === "Import" && node.arguments.length !== 1) { - this.raise(node.start, "import() requires exactly one argument"); + if (node.callee.type === "Import") { + if (node.arguments.length !== 1) { + this.raise(node.start, "import() requires exactly one argument"); + } + + const importArg = node.arguments[0]; + if (importArg && importArg.type === "SpreadElement") { + this.raise(importArg.start, "... is not allowed in import()"); + } } base = this.finishNode(node, "CallExpression"); diff --git a/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/actual.js b/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/actual.js new file mode 100644 index 0000000000..87bfc54932 --- /dev/null +++ b/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/actual.js @@ -0,0 +1 @@ +import(...[1]) diff --git a/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/options.json b/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/options.json new file mode 100644 index 0000000000..c4e1e2ffeb --- /dev/null +++ b/test/fixtures/experimental/dynamic-import/invalid-arguments-spread/options.json @@ -0,0 +1,3 @@ +{ + "throws": "... is not allowed in import() (1:7)" +}