fix issues uncovered by lgtm (#4749)

This commit is contained in:
Alex Lam S.L
2021-03-07 04:44:34 +00:00
committed by GitHub
parent 12babdfe20
commit 31e7d25cad
2 changed files with 37 additions and 32 deletions

View File

@@ -277,7 +277,7 @@ merge(Compressor.prototype, {
export_symbol(stat.name); export_symbol(stat.name);
} }
} else if (stat instanceof AST_ExportReferences) { } else if (stat instanceof AST_ExportReferences) {
body.splice(i, 1); body.splice(i--, 1);
[].push.apply(props, stat.properties); [].push.apply(props, stat.properties);
} }
} }
@@ -773,10 +773,10 @@ merge(Compressor.prototype, {
// (function(a,b) {...})(c,d) ---> (function() {var a=c,b=d; ...})() // (function(a,b) {...})(c,d) ---> (function() {var a=c,b=d; ...})()
// So existing transformation rules can work on them. // So existing transformation rules can work on them.
var safe = !fn.uses_arguments || tw.has_directive("use strict"); var safe = !fn.uses_arguments || tw.has_directive("use strict");
fn.argnames.forEach(function(arg, i) { fn.argnames.forEach(function(argname, i) {
var value = iife.args[i]; var value = iife.args[i];
scan_declaration(tw, compressor, arg, function() { scan_declaration(tw, compressor, argname, function() {
var j = fn.argnames.indexOf(arg); var j = fn.argnames.indexOf(argname);
var arg = j < 0 ? value : iife.args[j]; var arg = j < 0 ? value : iife.args[j];
if (arg instanceof AST_Sequence && arg.expressions.length < 2) arg = arg.expressions[0]; if (arg instanceof AST_Sequence && arg.expressions.length < 2) arg = arg.expressions[0];
return arg || make_node(AST_Undefined, iife); return arg || make_node(AST_Undefined, iife);
@@ -1889,24 +1889,21 @@ merge(Compressor.prototype, {
var def = lhs.definition(); var def = lhs.definition();
var referenced = def.references.length - def.replaced; var referenced = def.references.length - def.replaced;
if (candidate instanceof AST_Assign) referenced--; if (candidate instanceof AST_Assign) referenced--;
if (replaced && referenced == replaced) { if (!replaced || referenced > replaced) {
abort = false;
} else {
candidates.push(hit_stack); candidates.push(hit_stack);
force_single = true; force_single = true;
continue; continue;
} }
if (replaced) { abort = false;
hit_index = 0; hit_index = 0;
hit = funarg; hit = funarg;
for (var i = stat_index; !abort && i < statements.length; i++) { for (var i = stat_index; !abort && i < statements.length; i++) {
if (!statements[i].transform(multi_replacer)) statements.splice(i--, 1); if (!statements[i].transform(multi_replacer)) statements.splice(i--, 1);
}
if (candidate instanceof AST_VarDef) {
replaced = !compressor.exposed(def) && def.references.length == def.replaced;
}
value_def.single_use = false;
} }
if (candidate instanceof AST_VarDef) {
replaced = !compressor.exposed(def) && def.references.length == def.replaced;
}
value_def.single_use = false;
} }
if (replaced && !remove_candidate(candidate)) statements.splice(stat_index, 1); if (replaced && !remove_candidate(candidate)) statements.splice(stat_index, 1);
} }
@@ -6927,20 +6924,14 @@ merge(Compressor.prototype, {
value = value.drop_side_effect_free(compressor); value = value.drop_side_effect_free(compressor);
node.value = value ? make_sequence(node.value, [ node.value = value ? make_sequence(node.value, [
value, value,
make_node(AST_Number, node.value, { make_node(AST_Number, node.value, { value: 0 }),
value: 0
})
]) : null; ]) : null;
} else if (ev && !(ev instanceof AST_Node)) { } else if (!(ev instanceof AST_Node)) {
value = value.drop_side_effect_free(compressor); value = value.drop_side_effect_free(compressor);
node.value = value ? make_sequence(node.value, [ node.value = value ? make_sequence(node.value, [
value, value,
make_node(AST_Number, node.value, { make_node(AST_Number, node.value, { value: 1 }),
value: 1 ]) : make_node(AST_Number, node.value, { value: 1 });
})
]) : make_node(AST_Number, node.value, {
value: 1
});
} }
} }
}); });
@@ -8397,7 +8388,7 @@ merge(Compressor.prototype, {
continue; continue;
} }
} }
} else if (argname && drop_fargs(argname, args[i])) { } else if (drop_fargs(argname, args[i])) {
var node = args[i].drop_side_effect_free(compressor); var node = args[i].drop_side_effect_free(compressor);
fn.argnames.splice(i, 1); fn.argnames.splice(i, 1);
args.splice(i, 1); args.splice(i, 1);
@@ -11469,9 +11460,7 @@ merge(Compressor.prototype, {
value.key = "" + value.key.value; value.key = "" + value.key.value;
} }
} }
return changed ? make_node(AST_Object, self, { return make_node(AST_Object, self, { properties: values });
properties: values
}) : self;
function flush() { function flush() {
keys.each(function(props) { keys.each(function(props) {

View File

@@ -203,7 +203,23 @@ mangle_rename: {
} }
} }
hoist_exports: { hoist_exports_1: {
options = {
hoist_exports: true,
}
input: {
export { a };
export var b;
export function f() {}
}
expect: {
var b;
function f() {}
export { a, b, f };
}
}
hoist_exports_2: {
options = { options = {
evaluate: true, evaluate: true,
hoist_exports: true, hoist_exports: true,