diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-04-07 03:42:17 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-07 03:42:17 +0800 |
commit | cc6aa3e5ac13c0da9f2481181f5b4f11275ca8c8 (patch) | |
tree | b0876f76806180f7d14a824312944cee61482718 /test/compress | |
parent | e869779a988b519487da0d6e2bd8e4849cd6d9f1 (diff) | |
download | tracifyjs-cc6aa3e5ac13c0da9f2481181f5b4f11275ca8c8.tar.gz tracifyjs-cc6aa3e5ac13c0da9f2481181f5b4f11275ca8c8.zip |
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`.
Diffstat (limited to 'test/compress')
-rw-r--r-- | test/compress/reduce_vars.js | 72 |
1 files changed, 72 insertions, 0 deletions
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" +} |