aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-05-19 22:11:39 +0100
committerGitHub <noreply@github.com>2021-05-20 05:11:39 +0800
commitd6152e6a76908223cace651898e12a3b3c9a445d (patch)
treee208e034823e2fb26aada3949db6a3cd321c88dd
parentd930c705f6064448c7e6cba8e0e9e8d46d5e3762 (diff)
downloadtracifyjs-d6152e6a76908223cace651898e12a3b3c9a445d.tar.gz
tracifyjs-d6152e6a76908223cace651898e12a3b3c9a445d.zip
fix corner case in `collapse_vars` (#4946)
-rw-r--r--lib/compress.js3
-rw-r--r--test/compress/collapse_vars.js34
-rw-r--r--test/reduce.js2
3 files changed, 37 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 6f702ea9..9a6d0191 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1911,7 +1911,8 @@ merge(Compressor.prototype, {
if (!--replaced) abort = true;
if (is_lhs(node, multi_replacer.parent())) return node;
var ref = rvalue.clone();
- value_def.references.push(ref);
+ ref.scope = node.scope;
+ ref.reference();
if (replaced == assign_pos) {
abort = true;
return make_node(AST_Assign, candidate, {
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index 83eccdf1..d2f27299 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -9245,3 +9245,37 @@ issue_4935: {
}
expect_stdout: "1 0"
}
+
+inline_throw: {
+ options = {
+ collapse_vars: true,
+ inline: true,
+ keep_fargs: false,
+ unused: true,
+ }
+ input: {
+ try {
+ (function() {
+ return function(a) {
+ return function(b) {
+ throw b;
+ }(a);
+ };
+ })()("PASS");
+ } catch (e) {
+ console.log(e);
+ }
+ }
+ expect: {
+ try {
+ (function(a) {
+ return function() {
+ throw a;
+ }();
+ })("PASS");
+ } catch (e) {
+ console.log(e);
+ }
+ }
+ expect_stdout: "PASS"
+}
diff --git a/test/reduce.js b/test/reduce.js
index 3f154fa7..15f869e5 100644
--- a/test/reduce.js
+++ b/test/reduce.js
@@ -46,7 +46,7 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
if (verbose) {
log("// Node.js " + process.version + " on " + os.platform() + " " + os.arch());
}
- if (differs.error && [ "DefaultsError", "SyntaxError" ].indexOf(differs.error.name) < 0) {
+ if (differs && differs.error && [ "DefaultsError", "SyntaxError" ].indexOf(differs.error.name) < 0) {
test_for_diff = test_minify;
differs = test_for_diff(testcase, minify_options, result_cache, max_timeout);
}