aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-08-16 22:54:27 +0100
committerGitHub <noreply@github.com>2020-08-17 05:54:27 +0800
commit23f0dca992d89f5955aa1676ca2569e77315906e (patch)
tree9657ad15f4cbfa77f79362547de9580c75018fa7
parent45ab3b51d805f69bb77eb71db6af55139e1415dc (diff)
downloadtracifyjs-23f0dca992d89f5955aa1676ca2569e77315906e.tar.gz
tracifyjs-23f0dca992d89f5955aa1676ca2569e77315906e.zip
fix corner cases in `collapse_vars` & `dead_code` (#4052)
fixes #4051
-rw-r--r--lib/compress.js13
-rw-r--r--test/compress/collapse_vars.js19
-rw-r--r--test/compress/dead-code.js21
3 files changed, 50 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 6f739368..c9892ce2 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1834,7 +1834,9 @@ merge(Compressor.prototype, {
if (parent instanceof AST_SimpleStatement) return find_stop_unused(parent, level + 1);
if (parent instanceof AST_Switch) return find_stop_unused(parent, level + 1);
if (parent instanceof AST_Unary) return find_stop_unused(parent, level + 1);
- if (parent instanceof AST_VarDef) return find_stop_unused(parent, level + 1);
+ if (parent instanceof AST_VarDef) {
+ return may_throw(parent) ? node : find_stop_unused(parent, level + 1);
+ }
return null;
}
@@ -7920,12 +7922,17 @@ merge(Compressor.prototype, {
}
}
} else if (self.left instanceof AST_SymbolRef) {
- if (self.operator == "=" && self.left.equivalent_to(self.right)) return self.right;
+ var parent;
+ if (self.operator == "=" && self.left.equivalent_to(self.right)
+ && !((parent = compressor.parent()) instanceof AST_UnaryPrefix && parent.operator == "delete")) {
+ return self.right;
+ }
if (self.left.is_immutable()) return strip_assignment();
var def = self.left.definition();
var scope = def.scope.resolve();
var local = scope === compressor.find_parent(AST_Lambda);
- var level = 0, node, parent = self;
+ var level = 0, node;
+ parent = self;
do {
node = parent;
parent = compressor.parent(level++);
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index 7fc4b768..aa8b89c9 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -8447,3 +8447,22 @@ issue_4047_2: {
"NaN",
]
}
+
+issue_4051: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ try {
+ var a = (b = b.p, "FAIL"), b = b;
+ } catch (e) {}
+ console.log(a);
+ }
+ expect: {
+ try {
+ var a = (b = b.p, "FAIL"), b = b;
+ } catch (e) {}
+ console.log(a);
+ }
+ expect_stdout: "undefined"
+}
diff --git a/test/compress/dead-code.js b/test/compress/dead-code.js
index 4f731875..89829b65 100644
--- a/test/compress/dead-code.js
+++ b/test/compress/dead-code.js
@@ -1341,3 +1341,24 @@ issue_3967: {
}
expect_stdout: "PASS"
}
+
+issue_4051: {
+ options = {
+ dead_code: true,
+ }
+ input: {
+ try {
+ delete (A = A);
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect: {
+ try {
+ delete (A = A);
+ } catch (e) {
+ console.log("PASS");
+ }
+ }
+ expect_stdout: "PASS"
+}