aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-10-22 03:13:11 +0100
committerGitHub <noreply@github.com>2020-10-22 10:13:11 +0800
commit23ca7d675f5c7bbd80571ce40b8d951831d359ad (patch)
tree48cfea7fb69cc8d6aa330d1d4d5ece5be87a75d9
parentfd8c0212b8d81b4f1630155bb170214ce87d0e70 (diff)
downloadtracifyjs-23ca7d675f5c7bbd80571ce40b8d951831d359ad.tar.gz
tracifyjs-23ca7d675f5c7bbd80571ce40b8d951831d359ad.zip
fix corner case in `functions` (#4234)
fixes #4233
-rw-r--r--lib/compress.js4
-rw-r--r--test/compress/functions.js39
2 files changed, 42 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js
index b82fcca0..ec9fd2a1 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -4774,7 +4774,9 @@ merge(Compressor.prototype, {
node.definitions.forEach(function(defn) {
var def = defn.name.definition();
var_defs_by_id.add(def.id, defn);
- if ((!drop_vars || (node instanceof AST_Const ? def.redefined() : def.const_redefs))
+ var redef = def.redefined();
+ if (redef && node instanceof AST_Var) var_defs_by_id.add(redef.id, defn);
+ if ((!drop_vars || (node instanceof AST_Const ? redef : def.const_redefs))
&& !(def.id in in_use_ids)) {
in_use_ids[def.id] = true;
in_use.push(def);
diff --git a/test/compress/functions.js b/test/compress/functions.js
index 4e65b128..4ed0dc1b 100644
--- a/test/compress/functions.js
+++ b/test/compress/functions.js
@@ -5076,3 +5076,42 @@ issue_4186: {
}
expect_stdout: "function"
}
+
+issue_4233: {
+ options = {
+ functions: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ (function() {
+ try {
+ var a = function() {};
+ try {
+ throw 42;
+ } catch (a) {
+ (function() {
+ console.log(typeof a);
+ })();
+ var a;
+ }
+ } catch (e) {}
+ })();
+ }
+ expect: {
+ (function() {
+ try {
+ var a = function() {};
+ try {
+ throw 42;
+ } catch (a) {
+ (function() {
+ console.log(typeof a);
+ })();
+ var a;
+ }
+ } catch (e) {}
+ })();
+ }
+ expect_stdout: "number"
+}