diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-05-26 16:08:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-26 16:08:51 +0800 |
commit | dc33facfcb7899c0422cb14b08dddfcf06b1c949 (patch) | |
tree | 1409988235910fe711a5e8c07f25a4b6d3cfb9ec /test/compress/issue-1034.js | |
parent | c70fb6038448cf072cfa96cee78eaa55aa99c0fa (diff) | |
download | tracifyjs-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.js | 134 |
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]", + ] +} |