aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-03-15 18:44:13 +0800
committerGitHub <noreply@github.com>2017-03-15 18:44:13 +0800
commit8223b2e0db4cc41d467d9b94b05511a36c320184 (patch)
tree2bedd267ee865aec6aa7fe99e250d00f0a512a99 /test
parent381bd3836ecd79eb5d4f7b84807c778ee1acf9c9 (diff)
downloadtracifyjs-8223b2e0db4cc41d467d9b94b05511a36c320184.tar.gz
tracifyjs-8223b2e0db4cc41d467d9b94b05511a36c320184.zip
fix `AST_Node.optimize()` (#1602)
Liberal use of `Compressor.transform()` and `AST_Node.optimize()` presents an issue for look-up operations like `TreeWalker.in_boolean_context()` and `TreeWalker.parent()`. This is an incremental fix such that `AST_Node.optimize()` would now contain the correct stack information when called correctly.
Diffstat (limited to 'test')
-rw-r--r--test/compress/transform.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/test/compress/transform.js b/test/compress/transform.js
new file mode 100644
index 00000000..7b616e40
--- /dev/null
+++ b/test/compress/transform.js
@@ -0,0 +1,129 @@
+booleans_evaluate: {
+ options = {
+ booleans: true,
+ evaluate: true,
+ }
+ input: {
+ console.log(typeof void 0 != "undefined");
+ console.log(1 == 1, 1 === 1)
+ console.log(1 != 1, 1 !== 1)
+ }
+ expect: {
+ console.log(!1);
+ console.log(!0, !0);
+ console.log(!1, !1);
+ }
+}
+
+booleans_global_defs: {
+ options = {
+ booleans: true,
+ evaluate: true,
+ global_defs: {
+ A: true,
+ },
+ }
+ input: {
+ console.log(A == 1);
+ }
+ expect: {
+ console.log(!0);
+ }
+}
+
+condition_evaluate: {
+ options = {
+ booleans: true,
+ dead_code: false,
+ evaluate: true,
+ loops: false,
+ }
+ input: {
+ while (1 === 2);
+ for (; 1 == true;);
+ if (void 0 == null);
+ }
+ expect: {
+ while (!1);
+ for (; !0;);
+ if (!0);
+ }
+}
+
+if_else_empty: {
+ options = {
+ conditionals: true,
+ }
+ input: {
+ if ({} ? a : b); else {}
+ }
+ expect: {
+ !{} ? b : a;
+ }
+}
+
+label_if_break: {
+ options = {
+ conditionals: true,
+ dead_code: true,
+ evaluate: true,
+ }
+ input: {
+ L: if (true) {
+ a;
+ break L;
+ }
+ }
+ expect: {
+ a;
+ }
+}
+
+while_if_break: {
+ options = {
+ conditionals: true,
+ loops: true,
+ sequences: true,
+ }
+ input: {
+ while (a) {
+ if (b) if(c) d;
+ if (e) break;
+ }
+ }
+ expect: {
+ for(; a && (b && c && d, !e););
+ }
+}
+
+if_return: {
+ options = {
+ booleans: true,
+ conditionals: true,
+ if_return: true,
+ sequences: true,
+ }
+ input: {
+ function f(w, x, y, z) {
+ if (x) return;
+ if (w) {
+ if (y) return;
+ } else if (z) return;
+ if (x == y) return true;
+
+ if (x) w();
+ if (y) z();
+ return true;
+ }
+ }
+ expect: {
+ function f(w, x, y, z) {
+ if (!x) {
+ if (w) {
+ if (y) return;
+ } else if (z) return;
+ return x == y || (x && w(), y && z(), !0);
+ }
+ }
+ }
+}