aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-03-07 04:44:34 +0000
committerGitHub <noreply@github.com>2021-03-07 12:44:34 +0800
commit31e7d25cad45bc4eda220cc0de594bf084bb28d8 (patch)
tree8c8f4f4ddc8ec41dce8469e285232d8fa42a31d2
parent12babdfe20eae91de1b60a5a3cfb7db0a5a04cb0 (diff)
downloadtracifyjs-31e7d25cad45bc4eda220cc0de594bf084bb28d8.tar.gz
tracifyjs-31e7d25cad45bc4eda220cc0de594bf084bb28d8.zip
fix issues uncovered by lgtm (#4749)
-rw-r--r--lib/compress.js51
-rw-r--r--test/compress/exports.js18
2 files changed, 37 insertions, 32 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 0069570c..349dad90 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -277,7 +277,7 @@ merge(Compressor.prototype, {
export_symbol(stat.name);
}
} else if (stat instanceof AST_ExportReferences) {
- body.splice(i, 1);
+ body.splice(i--, 1);
[].push.apply(props, stat.properties);
}
}
@@ -773,10 +773,10 @@ merge(Compressor.prototype, {
// (function(a,b) {...})(c,d) ---> (function() {var a=c,b=d; ...})()
// So existing transformation rules can work on them.
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];
- scan_declaration(tw, compressor, arg, function() {
- var j = fn.argnames.indexOf(arg);
+ scan_declaration(tw, compressor, argname, function() {
+ var j = fn.argnames.indexOf(argname);
var arg = j < 0 ? value : iife.args[j];
if (arg instanceof AST_Sequence && arg.expressions.length < 2) arg = arg.expressions[0];
return arg || make_node(AST_Undefined, iife);
@@ -1889,24 +1889,21 @@ merge(Compressor.prototype, {
var def = lhs.definition();
var referenced = def.references.length - def.replaced;
if (candidate instanceof AST_Assign) referenced--;
- if (replaced && referenced == replaced) {
- abort = false;
- } else {
+ if (!replaced || referenced > replaced) {
candidates.push(hit_stack);
force_single = true;
continue;
}
- if (replaced) {
- hit_index = 0;
- hit = funarg;
- for (var i = stat_index; !abort && i < statements.length; i++) {
- 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;
+ abort = false;
+ hit_index = 0;
+ hit = funarg;
+ for (var i = stat_index; !abort && i < statements.length; i++) {
+ 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 (replaced && !remove_candidate(candidate)) statements.splice(stat_index, 1);
}
@@ -6927,20 +6924,14 @@ merge(Compressor.prototype, {
value = value.drop_side_effect_free(compressor);
node.value = value ? make_sequence(node.value, [
value,
- make_node(AST_Number, node.value, {
- value: 0
- })
+ make_node(AST_Number, node.value, { value: 0 }),
]) : null;
- } else if (ev && !(ev instanceof AST_Node)) {
+ } else if (!(ev instanceof AST_Node)) {
value = value.drop_side_effect_free(compressor);
node.value = value ? make_sequence(node.value, [
value,
- make_node(AST_Number, node.value, {
- value: 1
- })
- ]) : make_node(AST_Number, node.value, {
- 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;
}
}
- } else if (argname && drop_fargs(argname, args[i])) {
+ } else if (drop_fargs(argname, args[i])) {
var node = args[i].drop_side_effect_free(compressor);
fn.argnames.splice(i, 1);
args.splice(i, 1);
@@ -11469,9 +11460,7 @@ merge(Compressor.prototype, {
value.key = "" + value.key.value;
}
}
- return changed ? make_node(AST_Object, self, {
- properties: values
- }) : self;
+ return make_node(AST_Object, self, { properties: values });
function flush() {
keys.each(function(props) {
diff --git a/test/compress/exports.js b/test/compress/exports.js
index a7239148..3aaae4ae 100644
--- a/test/compress/exports.js
+++ b/test/compress/exports.js
@@ -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 = {
evaluate: true,
hoist_exports: true,