fix corner case with destructuring `catch` (#4426)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sun, 20 Dec 2020 02:31:32 +0000 (02:31 +0000)
committerGitHub <noreply@github.com>
Sun, 20 Dec 2020 02:31:32 +0000 (10:31 +0800)
fixes #4425

lib/scope.js
test/compress/destructured.js

index 779637c..c59dc0a 100644 (file)
@@ -255,7 +255,9 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
                 i = in_arg.lastIndexOf(sym.scope, i - 1);
                 if (i < 0) break;
                 var decl = sym.orig[0];
-                if (decl instanceof AST_SymbolFunarg || decl instanceof AST_SymbolLambda) {
+                if (decl instanceof AST_SymbolCatch
+                    || decl instanceof AST_SymbolFunarg
+                    || decl instanceof AST_SymbolLambda) {
                     node.in_arg = true;
                     break;
                 }
index 06c9fdd..d36bbf3 100644 (file)
@@ -2001,3 +2001,39 @@ issue_4420: {
     expect_stdout: "PASS"
     node_version: ">=8"
 }
+
+issue_4425: {
+    rename = true
+    input: {
+        var a;
+        console.log(function() {
+            try {
+                try {
+                    throw 42;
+                } catch ({
+                    [a]: a,
+                }) {}
+                return "FAIL";
+            } catch (e) {
+                return "PASS";
+            }
+        }());
+    }
+    expect: {
+        var a;
+        console.log(function() {
+            try {
+                try {
+                    throw 42;
+                } catch ({
+                    [b]: b,
+                }) {}
+                return "FAIL";
+            } catch (c) {
+                return "PASS";
+            }
+        }());
+    }
+    expect_stdout: "PASS"
+    node_version: ">=8"
+}