diff --git a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/actual.js b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/actual.js index 89d57fdd2..bcf4a24eb 100644 --- a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/actual.js +++ b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/actual.js @@ -19,6 +19,10 @@ for (; true; ) { for (; false; ) { baz(); } +for (var j; false; ) { + blah(); +} +for (0; false; ) {} // do_while do { diff --git a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/expected.js b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/expected.js index 4e95ee2bf..421553525 100644 --- a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/expected.js +++ b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/loops/expected.js @@ -16,6 +16,8 @@ for (;;) { bar(); } +var j; + // do_while do { foo(); diff --git a/packages/babel-plugin-minify-dead-code-elimination/src/index.js b/packages/babel-plugin-minify-dead-code-elimination/src/index.js index 448fa7d18..7f2f6f673 100644 --- a/packages/babel-plugin-minify-dead-code-elimination/src/index.js +++ b/packages/babel-plugin-minify-dead-code-elimination/src/index.js @@ -678,7 +678,12 @@ module.exports = ({ types: t, traverse }) => { if (result.value) { test.remove(); } else { - path.remove(); + const init = path.get("init"); + if (init.node && !init.isPure()) { + path.replaceWith(init); + } else { + path.remove(); + } } } }, diff --git a/packages/babel-preset-minify/__tests__/minify-env-tests.js b/packages/babel-preset-minify/__tests__/minify-env-tests.js index 55f7d1ce7..b175e8b61 100644 --- a/packages/babel-preset-minify/__tests__/minify-env-tests.js +++ b/packages/babel-preset-minify/__tests__/minify-env-tests.js @@ -183,4 +183,17 @@ describe("preset along with env", () => { })(); ` ); + + thePlugin( + "should fix issue#824 simplify + deadcode", + ` + let foo; + while (0) {} + console.log(foo); + `, + ` + var foo; + console.log(foo); + ` + ); });