From 43c0a0e65ff6ba7f8032d84aa5dfbd200d5da6a5 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 2 Jun 2015 16:16:36 +0100 Subject: [PATCH] remove all non-function statements after completion statements in blocks --- .../minification/dead-code-elimination.js | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/babel/transformation/transformers/minification/dead-code-elimination.js b/src/babel/transformation/transformers/minification/dead-code-elimination.js index f39d8ab2b2..5efa4bf462 100644 --- a/src/babel/transformation/transformers/minification/dead-code-elimination.js +++ b/src/babel/transformation/transformers/minification/dead-code-elimination.js @@ -19,7 +19,7 @@ function toStatements(node) { export var metadata = { optional: true, - group: "builtin-setup" + group: "builtin-basic" }; export function ReferencedIdentifier(node, parent, scope) { @@ -76,6 +76,25 @@ export function ConditionalExpression(node, parent, scope) { } } +export function BlockStatement(node) { + var paths = this.get("body"); + + var purge = false; + + for (var i = 0; i < paths.length; i++) { + let path = paths[i]; + + if (!purge && path.isCompletionStatement()) { + purge = true; + continue; + } + + if (purge && !path.isFunctionDeclaration()) { + path.dangerouslyRemove(); + } + } +} + export var IfStatement = { exit(node) { var consequent = node.consequent;