fix corner case in reduce_vars (#4262)

fixes #4261
This commit is contained in:
Alex Lam S.L
2020-11-07 02:00:04 +00:00
committed by GitHub
parent c2f6fd5fde
commit 4bbeb09f7c
4 changed files with 93 additions and 14 deletions

View File

@@ -8429,7 +8429,7 @@ merge(Compressor.prototype, {
fixed.name = make_node(AST_SymbolLambda, fixed.name, fixed.name);
}
if (fixed instanceof AST_Lambda) {
var scope = self.scope;
var scope = self.scope.resolve();
fixed.enclosed.forEach(function(def) {
if (fixed.variables.has(def.name)) return;
if (scope.var_names()[def.name]) return;

View File

@@ -753,7 +753,7 @@ function parse($TEXT, options) {
}
}
var statement = embed_tokens(function(strict_defun) {
var statement = embed_tokens(function() {
handle_regexp();
switch (S.token.type) {
case "string":
@@ -844,9 +844,6 @@ function parse($TEXT, options) {
return for_();
case "function":
if (!strict_defun && S.input.has_directive("use strict")) {
croak("In strict mode code, functions can only be declared at top level or immediately within another function.");
}
next();
return function_(AST_Defun);
@@ -1038,7 +1035,7 @@ function parse($TEXT, options) {
S.input.push_directives_stack();
S.in_loop = 0;
S.labels = [];
var body = block_(true);
var body = block_();
if (S.input.has_directive("use strict")) {
if (name) strict_verify_symbol(name);
argnames.forEach(strict_verify_symbol);
@@ -1067,12 +1064,12 @@ function parse($TEXT, options) {
});
}
function block_(strict_defun) {
function block_() {
expect("{");
var a = [];
while (!is("punc", "}")) {
if (is("eof")) expect_token("punc", "}");
a.push(statement(strict_defun));
a.push(statement());
}
next();
return a;
@@ -1616,7 +1613,7 @@ function parse($TEXT, options) {
var body = [];
S.input.push_directives_stack();
while (!is("eof"))
body.push(statement(true));
body.push(statement());
S.input.pop_directives_stack();
var end = prev();
var toplevel = options.toplevel;