fix empty statement with label

This commit is contained in:
alexlamsl 2017-04-21 19:33:18 +08:00
parent 9195a5b56d
commit a7e607d34e
3 changed files with 21 additions and 11 deletions

View File

@ -2395,7 +2395,7 @@ merge(Compressor.prototype, {
if (compressor.option("dead_code") && self instanceof AST_While) { if (compressor.option("dead_code") && self instanceof AST_While) {
var a = []; var a = [];
extract_declarations_from_unreachable_code(compressor, self.body, a); extract_declarations_from_unreachable_code(compressor, self.body, a);
return make_node(AST_BlockStatement, self, { body: a }); return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor);
} }
if (self instanceof AST_Do) { if (self instanceof AST_Do) {
var has_loop_control = false; var has_loop_control = false;
@ -2475,7 +2475,7 @@ merge(Compressor.prototype, {
})); }));
} }
extract_declarations_from_unreachable_code(compressor, self.body, a); extract_declarations_from_unreachable_code(compressor, self.body, a);
return make_node(AST_BlockStatement, self, { body: a }); return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor);
} }
if (cond !== self.condition) { if (cond !== self.condition) {
cond = make_node_from_constant(cond, self.condition).transform(compressor); cond = make_node_from_constant(cond, self.condition).transform(compressor);
@ -2727,9 +2727,9 @@ merge(Compressor.prototype, {
var body = []; var body = [];
if (self.bcatch) extract_declarations_from_unreachable_code(compressor, self.bcatch, body); if (self.bcatch) extract_declarations_from_unreachable_code(compressor, self.bcatch, body);
if (self.bfinally) body = body.concat(self.bfinally.body); if (self.bfinally) body = body.concat(self.bfinally.body);
return body.length > 0 ? make_node(AST_BlockStatement, self, { return make_node(AST_BlockStatement, self, {
body: body body: body
}).optimize(compressor) : make_node(AST_EmptyStatement, self); }).optimize(compressor);
} }
return self; return self;
}); });

View File

@ -190,11 +190,7 @@ function OutputStream(options) {
var might_need_space = false; var might_need_space = false;
var might_need_semicolon = false; var might_need_semicolon = false;
var might_add_newline = 0; var might_add_newline = 0;
var last = null; var last = "";
function last_char() {
return last.charAt(last.length - 1);
};
var ensure_line_len = options.max_line_len ? function() { var ensure_line_len = options.max_line_len ? function() {
if (current_col > options.max_line_len) { if (current_col > options.max_line_len) {
@ -218,10 +214,11 @@ function OutputStream(options) {
function print(str) { function print(str) {
str = String(str); str = String(str);
var ch = str.charAt(0); var ch = str.charAt(0);
var prev = last.charAt(last.length - 1);
if (might_need_semicolon) { if (might_need_semicolon) {
might_need_semicolon = false; might_need_semicolon = false;
if ((!ch || ";}".indexOf(ch) < 0) && !/[;]$/.test(last)) { if (prev == ":" && ch == "}" || (!ch || ";}".indexOf(ch) < 0) && prev != ";") {
if (options.semicolons || requireSemicolonChars(ch)) { if (options.semicolons || requireSemicolonChars(ch)) {
OUTPUT += ";"; OUTPUT += ";";
current_col++; current_col++;
@ -258,7 +255,6 @@ function OutputStream(options) {
} }
if (might_need_space) { if (might_need_space) {
var prev = last_char();
if ((is_identifier_char(prev) if ((is_identifier_char(prev)
&& (is_identifier_char(ch) || ch == "\\")) && (is_identifier_char(ch) || ch == "\\"))
|| (ch == "/" && ch == prev) || (ch == "/" && ch == prev)

View File

@ -118,3 +118,17 @@ label_do: {
} while (0); } while (0);
} }
} }
label_while: {
options = {
evaluate: true,
dead_code: true,
loops: true,
}
input: {
function f() {
L: while (0) continue L;
}
}
expect_exact: "function f(){L:;}"
}