aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-03-16 00:05:01 +0000
committerGitHub <noreply@github.com>2021-03-16 08:05:01 +0800
commite821787095d856448940ab93a7a03febb7e644de (patch)
treefef5ef7aef95d9685c4e8c18ed94e14bdcf98297
parentaa6e33e2085da5ee9254910726a5bd7caac43dcc (diff)
downloadtracifyjs-e821787095d856448940ab93a7a03febb7e644de.tar.gz
tracifyjs-e821787095d856448940ab93a7a03febb7e644de.zip
fix corner case in `reduce_vars` (#4782)
-rw-r--r--lib/compress.js2
-rw-r--r--test/compress/let.js82
2 files changed, 82 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 3560c13f..563d09d9 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -10324,7 +10324,7 @@ merge(Compressor.prototype, {
single_use = false;
} else if (fixed.name && fixed.name.definition() !== def) {
single_use = false;
- } else if (fixed.parent_scope !== self.scope.resolve() || is_funarg(def)) {
+ } else if (fixed.parent_scope !== self.scope || is_funarg(def)) {
single_use = fixed.is_constant_expression(self.scope);
if (single_use == "f") {
var scope = self.scope;
diff --git a/test/compress/let.js b/test/compress/let.js
index 53956c48..3f42dd10 100644
--- a/test/compress/let.js
+++ b/test/compress/let.js
@@ -359,7 +359,7 @@ reduce_block_2_toplevel: {
node_version: ">=4"
}
-reduce_vars: {
+reduce_vars_1: {
options = {
evaluate: true,
reduce_vars: true,
@@ -381,6 +381,86 @@ reduce_vars: {
node_version: ">=4"
}
+reduce_vars_2: {
+ options = {
+ reduce_funcs: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ "use strict";
+ (function() {
+ function f() {
+ console.log(typeof a);
+ }
+ for (let a in [ 42 ])
+ f();
+ })();
+ }
+ expect: {
+ "use strict";
+ (function() {
+ function f() {
+ console.log(typeof a);
+ }
+ for (let a in [ 42 ])
+ f();
+ })();
+ }
+ expect_stdout: "undefined"
+ node_version: ">=4"
+}
+
+reduce_vars_3: {
+ options = {
+ reduce_funcs: true,
+ reduce_vars: true,
+ unused: true,
+ }
+ input: {
+ "use strict";
+ (function(scope) {
+ let i = 1;
+ function f() {
+ i = 0;
+ }
+ for (let i = 0, x = 0; i < scope.length; i++, x++) {
+ if (x != i) {
+ console.log("FAIL");
+ break;
+ }
+ f();
+ console.log(scope[i]);
+ }
+ console.log(i);
+ })([ 4, 2 ]);
+ }
+ expect: {
+ "use strict";
+ (function(scope) {
+ let i = 1;
+ function f() {
+ i = 0;
+ }
+ for (let i = 0, x = 0; i < scope.length; i++, x++) {
+ if (x != i) {
+ console.log("FAIL");
+ break;
+ }
+ f();
+ console.log(scope[i]);
+ }
+ console.log(i);
+ })([ 4, 2 ]);
+ }
+ expect_stdout: [
+ "4",
+ "2",
+ "0",
+ ]
+ node_version: ">=4"
+}
+
hoist_props: {
options = {
hoist_props: true,