From cc6aa3e5ac13c0da9f2481181f5b4f11275ca8c8 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 7 Apr 2017 03:42:17 +0800 Subject: fix incorrect context in variable substitution (#1791) `AST_Node.optimize()` is context-aware, so don't cache its results to be used elsewhere. Also fixed a few cases of AST corruption and beef up safety of `pure_getters`. --- test/compress/reduce_vars.js | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'test') diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index cdc4ef20..fdfec99e 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -1866,3 +1866,75 @@ delay_def: { } expect_stdout: true } + +booleans: { + options = { + booleans: true, + evaluate: true, + reduce_vars: true, + } + input: { + console.log(function(a) { + if (a != 0); + switch (a) { + case 0: + return "FAIL"; + case false: + return "PASS"; + } + }(false)); + } + expect: { + console.log(function(a) { + if (!1); + switch (!1) { + case 0: + return "FAIL"; + case !1: + return "PASS"; + } + }(!1)); + } + expect_stdout: "PASS" +} + +side_effects_assign: { + options = { + evaluate: true, + reduce_vars: true, + sequences: true, + side_effects: true, + toplevel: true, + } + input: { + var a = typeof void (a && a.in == 1, 0); + console.log(a); + } + expect: { + var a = typeof void (a && a.in); + console.log(a); + } + expect_stdout: "undefined" +} + +pure_getters: { + options = { + pure_getters: true, + reduce_vars: true, + side_effects: true, + toplevel: true, + } + input: { + try { + var a = (a.b, 2); + } catch (e) {} + console.log(a); + } + expect: { + try { + var a = (a.b, 2); + } catch (e) {} + console.log(a); + } + expect_stdout: "undefined" +} -- cgit v1.2.3