fix corner case in functions (#4192)

fixes #4191
This commit is contained in:
Alex Lam S.L
2020-10-12 02:26:56 +01:00
committed by GitHub
parent 55451e7b78
commit b1b8898e7c
3 changed files with 66 additions and 15 deletions

View File

@@ -4746,7 +4746,8 @@ merge(Compressor.prototype, {
node.definitions.forEach(function(defn) {
var def = defn.name.definition();
var_defs_by_id.add(def.id, defn);
if (!drop_vars && !(def.id in in_use_ids)) {
if ((!drop_vars || (node instanceof AST_Const ? def.redefined() : def.const_redefs))
&& !(def.id in in_use_ids)) {
in_use_ids[def.id] = true;
in_use.push(def);
}
@@ -4776,14 +4777,7 @@ merge(Compressor.prototype, {
// symbols (that may not be in_use).
tw = new TreeWalker(scan_ref_scoped);
for (var i = 0; i < in_use.length; i++) {
var in_use_def = in_use[i];
if (in_use_def.const_redefs) in_use_def.const_redefs.forEach(function(def) {
if (!(def.id in in_use_ids)) {
in_use_ids[def.id] = true;
in_use.push(def);
}
});
var init = initializations.get(in_use_def.id);
var init = initializations.get(in_use[i].id);
if (init) init.forEach(function(init) {
init.walk(tw);
});
@@ -4944,6 +4938,7 @@ merge(Compressor.prototype, {
}
} else if (compressor.option("functions")
&& !compressor.option("ie8")
&& !(node instanceof AST_Const)
&& var_defs.length == 1
&& sym.assignments == 0
&& def.value instanceof AST_Function

View File

@@ -240,12 +240,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
}
// ensure compression works if `const` reuses a scope variable
if (node instanceof AST_SymbolConst) {
var def = node.definition();
var redef = def.redefined();
if (redef) {
if (!redef.const_redefs) redef.const_redefs = [];
redef.const_redefs.push(def);
}
var redef = node.definition().redefined();
if (redef) redef.const_redefs = true;
return true;
}
});