diff --git a/test/compress/issue-1034.js b/test/compress/issue-1034.js index b502eff8..039af2ed 100644 --- a/test/compress/issue-1034.js +++ b/test/compress/issue-1034.js @@ -1,4 +1,4 @@ -non_hoisted_function_def_after_return: { +non_hoisted_function_after_return: { options = { hoist_funs: false, dead_code: true, conditionals: true, comparisons: true, evaluate: true, booleans: true, loops: true, unused: true, keep_fargs: true, @@ -34,3 +34,104 @@ non_hoisted_function_def_after_return: { ] } +non_hoisted_function_after_return_2a: { + 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: { + 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; + } + } + expect: { + // NOTE: Output is correct, but suboptimal. Not a regression. Can be improved in future. + // This output is run through non_hoisted_function_after_return_2b with same flags. + 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; + } + } + expect_warnings: [ + "WARN: Dropping unreachable code [test/compress/issue-1034.js:48,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:48,16]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:51,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:51,16]", + "WARN: Dropping unused variable a [test/compress/issue-1034.js:48,20]", + "WARN: Dropping unused function nope [test/compress/issue-1034.js:55,21]" + ] +} + +non_hoisted_function_after_return_2b: { + 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: { + // Note: output of test non_hoisted_function_after_return_2a run through compress again + 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; + } + } + expect: { + // the output we would have liked to see from non_hoisted_function_after_return_2a + function foo(x) { + return bar(x ? 1 : 2); + function bar(x) { return 7 - x; } + } + } + expect_warnings: [ + // Notice that some warnings are repeated by multiple compress passes. + // Not a regression. There is room for improvement here. + // Warnings should be cached and only output if unique. + "WARN: Dropping unreachable code [test/compress/issue-1034.js:100,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:100,16]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:100,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:100,16]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:100,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:100,16]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:100,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:100,16]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:102,12]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:102,12]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:106,12]", + "WARN: Dropping unreachable code [test/compress/issue-1034.js:100,16]", + "WARN: Declarations in unreachable code! [test/compress/issue-1034.js:100,16]", + "WARN: Dropping unused variable b [test/compress/issue-1034.js:100,20]", + "WARN: Dropping unused variable c [test/compress/issue-1034.js:102,16]" + ] +} +