[Pkg-javascript-commits] [node-acorn-jsx] 358/484: Add allowImportExportEverywhere option
Bastien Roucariès
rouca at moszumanska.debian.org
Sat Aug 19 14:20:56 UTC 2017
This is an automated email from the git hooks/post-receive script.
rouca pushed a commit to branch master
in repository node-acorn-jsx.
commit c989857aa5ec4713ff6bde4706105dc2cd2b2f40
Author: Marijn Haverbeke <marijnh at gmail.com>
Date: Thu Dec 11 14:48:03 2014 +0100
Add allowImportExportEverywhere option
Closes #174
---
README.md | 4 ++++
acorn.js | 14 ++++++++++----
test/tests-harmony.js | 2 ++
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 44d7574..58627b0 100644
--- a/README.md
+++ b/README.md
@@ -68,6 +68,10 @@ object referring to that same position.
the top level raises an error. Set this to `true` to accept such
code.
+- **allowImportExportEverywhere**: By default, `import` and `export`
+ declarations can only appear at a program's top level. Setting this
+ option to `true` allows them anywhere where a statement is allowed.
+
- **locations**: When `true`, each node has a `loc` object attached
with `start` and `end` subobjects, each of which contains the
one-based line and zero-based column numbers in `{line, column}`
diff --git a/acorn.js b/acorn.js
index d32eaf2..22b32f1 100644
--- a/acorn.js
+++ b/acorn.js
@@ -71,6 +71,9 @@
// When enabled, a return at the top level is not considered an
// error.
allowReturnOutsideFunction: false,
+ // When enabled, import/export statements are not constrained to
+ // appearing at the top of the program.
+ allowImportExportEverywhere: false,
// When `locations` is on, `loc` properties holding objects with
// `start` and `end` properties in `{line, column}` form (with
// line being 1-based and column 0-based) will be attached to the
@@ -1503,7 +1506,7 @@
var first = true;
if (!node.body) node.body = [];
while (tokType !== _eof) {
- var stmt = parseStatement();
+ var stmt = parseStatement(true);
node.body.push(stmt);
if (first && isUseStrict(stmt)) setStrict(true);
first = false;
@@ -1524,7 +1527,7 @@
// `if (foo) /blah/.exec(foo);`, where looking at the previous token
// does not help.
- function parseStatement() {
+ function parseStatement(topLevel) {
if (tokType === _slash || tokType === _assign && tokVal == "/=")
readToken(true);
@@ -1551,8 +1554,11 @@
case _with: return parseWithStatement(node);
case _braceL: return parseBlock(); // no point creating a function for this
case _semi: return parseEmptyStatement(node);
- case _export: return parseExport(node);
- case _import: return parseImport(node);
+ case _export:
+ case _import:
+ if (!topLevel && !options.allowImportExportEverywhere)
+ raise(tokStart, "'import' and 'export' may only appear at the top level");
+ return starttype === _import ? parseImport(node) : parseExport(node);
// If the statement does not start with a statement keyword or a
// brace, it's an ExpressionStatement or LabeledStatement. We
diff --git a/test/tests-harmony.js b/test/tests-harmony.js
index 834979b..9723073 100644
--- a/test/tests-harmony.js
+++ b/test/tests-harmony.js
@@ -14138,6 +14138,8 @@ testFail("({ t(eval) { \"use strict\"; } });", "Defining 'eval' in strict mode (
testFail("\"use strict\"; `${test}\\02`;", "Octal literal in strict mode (1:22)", {ecmaVersion: 6});
+testFail("if (1) import \"acorn\";", "'import' and 'export' may only appear at the top level (1:7)", {ecmaVersion: 6});
+
test("[...a, ] = b", {
type: "Program",
loc: {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-acorn-jsx.git
More information about the Pkg-javascript-commits
mailing list