support dynamic import(), trap invalid use of export (#2335)
This commit is contained in:
25
lib/parse.js
25
lib/parse.js
@@ -44,9 +44,9 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
var KEYWORDS = 'break case catch class const continue debugger default delete do else export extends finally for function if in instanceof new return switch throw try typeof var let void while with import';
|
||||
var KEYWORDS = 'break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with';
|
||||
var KEYWORDS_ATOM = 'false null true';
|
||||
var RESERVED_WORDS = 'enum implements interface package private protected public static super this ' + KEYWORDS_ATOM + " " + KEYWORDS;
|
||||
var RESERVED_WORDS = 'enum implements import interface package private protected public static super this ' + KEYWORDS_ATOM + " " + KEYWORDS;
|
||||
var KEYWORDS_BEFORE_EXPRESSION = 'return new delete throw else case yield await';
|
||||
|
||||
KEYWORDS = makePredicate(KEYWORDS);
|
||||
@@ -1013,6 +1013,12 @@ function parse($TEXT, options) {
|
||||
next();
|
||||
return function_(AST_Defun, false, true);
|
||||
}
|
||||
if (S.token.value == "import" && !is_token(peek(), "punc", "(")) {
|
||||
next();
|
||||
var node = import_();
|
||||
semicolon();
|
||||
return node;
|
||||
}
|
||||
return is_token(peek(), "punc", ":")
|
||||
? labeled_statement()
|
||||
: simple_statement();
|
||||
@@ -1149,15 +1155,11 @@ function parse($TEXT, options) {
|
||||
body : statement()
|
||||
});
|
||||
|
||||
case "import":
|
||||
next();
|
||||
var node = import_();
|
||||
semicolon();
|
||||
return node;
|
||||
|
||||
case "export":
|
||||
next();
|
||||
return export_();
|
||||
if (!is_token(peek(), "punc", "(")) {
|
||||
next();
|
||||
return export_();
|
||||
}
|
||||
}
|
||||
}
|
||||
unexpected();
|
||||
@@ -1875,7 +1877,8 @@ function parse($TEXT, options) {
|
||||
: !no_in && kind === "const" && S.input.has_directive("use strict")
|
||||
? croak("Missing initializer in const declaration") : null,
|
||||
end : prev()
|
||||
})
|
||||
});
|
||||
if (def.name.name == "import") croak("Unexpected token: import");
|
||||
}
|
||||
a.push(def);
|
||||
if (!is("punc", ","))
|
||||
|
||||
Reference in New Issue
Block a user