aboutsummaryrefslogtreecommitdiff
path: root/test/compress/issue-1034.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-05-26 16:08:51 +0800
committerGitHub <noreply@github.com>2017-05-26 16:08:51 +0800
commitdc33facfcb7899c0422cb14b08dddfcf06b1c949 (patch)
tree1409988235910fe711a5e8c07f25a4b6d3cfb9ec /test/compress/issue-1034.js
parentc70fb6038448cf072cfa96cee78eaa55aa99c0fa (diff)
downloadtracifyjs-dc33facfcb7899c0422cb14b08dddfcf06b1c949.tar.gz
tracifyjs-dc33facfcb7899c0422cb14b08dddfcf06b1c949.zip
fix `dead_code` on block-scoped `function` under "use strict" (#2006)
Technically not part of ES5, but commonly used code exists in the wild.
Diffstat (limited to 'test/compress/issue-1034.js')
-rw-r--r--test/compress/issue-1034.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/test/compress/issue-1034.js b/test/compress/issue-1034.js
index 57c584ab..28e47f07 100644
--- a/test/compress/issue-1034.js
+++ b/test/compress/issue-1034.js
@@ -116,3 +116,137 @@ non_hoisted_function_after_return_2b: {
"WARN: Dropping unreachable code [test/compress/issue-1034.js:101,12]",
]
}
+
+non_hoisted_function_after_return_strict: {
+ options = {
+ hoist_funs: false, dead_code: true, conditionals: true, comparisons: true,
+ evaluate: true, booleans: true, loops: true, unused: true, keep_fargs: true,
+ if_return: true, join_vars: true, cascade: true, side_effects: true
+ }
+ input: {
+ "use strict";
+ function foo(x) {
+ if (x) {
+ return bar();
+ not_called1();
+ } else {
+ return baz();
+ not_called2();
+ }
+ function bar() { return 7; }
+ return not_reached;
+ function UnusedFunction() {}
+ function baz() { return 8; }
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect: {
+ "use strict";
+ function foo(x) {
+ return x ? bar() : baz();
+ function bar() { return 7 }
+ function baz() { return 8 }
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect_stdout: "8 7"
+ expect_warnings: [
+ 'WARN: Dropping unreachable code [test/compress/issue-1034.js:131,16]',
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:134,16]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:137,12]",
+ "WARN: Dropping unused function UnusedFunction [test/compress/issue-1034.js:138,21]"
+ ]
+}
+
+non_hoisted_function_after_return_2a_strict: {
+ options = {
+ hoist_funs: false, dead_code: true, conditionals: true, comparisons: true,
+ evaluate: true, booleans: true, loops: true, unused: true, keep_fargs: true,
+ if_return: true, join_vars: true, cascade: true, side_effects: true,
+ collapse_vars: false, passes: 2, warnings: "verbose"
+ }
+ input: {
+ "use strict";
+ function foo(x) {
+ if (x) {
+ return bar(1);
+ var a = not_called(1);
+ } else {
+ return bar(2);
+ var b = not_called(2);
+ }
+ var c = bar(3);
+ function bar(x) { return 7 - x; }
+ function nope() {}
+ return b || c;
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect: {
+ "use strict";
+ function foo(x) {
+ return bar(x ? 1 : 2);
+ function bar(x) {
+ return 7 - x;
+ }
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect_stdout: "5 6"
+ expect_warnings: [
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:173,16]",
+ "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:173,16]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:176,16]",
+ "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:176,16]",
+ "WARN: Dropping unused variable a [test/compress/issue-1034.js:173,20]",
+ "WARN: Dropping unused function nope [test/compress/issue-1034.js:180,21]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:178,12]",
+ "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:178,12]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:181,12]",
+ "WARN: Dropping unused variable b [test/compress/issue-1034.js:176,20]",
+ "WARN: Dropping unused variable c [test/compress/issue-1034.js:178,16]",
+ ]
+}
+
+non_hoisted_function_after_return_2b_strict: {
+ options = {
+ hoist_funs: false, dead_code: true, conditionals: true, comparisons: true,
+ evaluate: true, booleans: true, loops: true, unused: true, keep_fargs: true,
+ if_return: true, join_vars: true, cascade: true, side_effects: true,
+ collapse_vars: false
+ }
+ input: {
+ "use strict";
+ function foo(x) {
+ if (x) {
+ return bar(1);
+ } else {
+ return bar(2);
+ var b;
+ }
+ var c = bar(3);
+ function bar(x) {
+ return 7 - x;
+ }
+ return b || c;
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect: {
+ "use strict";
+ function foo(x) {
+ return bar(x ? 1 : 2);
+ function bar(x) { return 7 - x; }
+ }
+ console.log(foo(0), foo(1));
+ }
+ expect_stdout: "5 6"
+ expect_warnings: [
+ // duplicate warnings no longer emitted
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:225,16]",
+ "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:225,16]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:227,12]",
+ "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:227,12]",
+ "WARN: Dropping unreachable code [test/compress/issue-1034.js:231,12]",
+ ]
+}