tweak do-while loops
- `do{...}while(false)` => `{...}`
- clean up `AST_While` logic
closes #1452
This commit is contained in:
@@ -1813,8 +1813,14 @@ 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 });
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// self instanceof AST_Do
|
||||||
|
return self.body;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (self instanceof AST_While) {
|
||||||
|
return make_node(AST_For, self, self).transform(compressor);
|
||||||
|
}
|
||||||
return self;
|
return self;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1863,16 +1869,6 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
OPT(AST_While, function(self, compressor) {
|
|
||||||
if (!compressor.option("loops")) return self;
|
|
||||||
self = AST_DWLoop.prototype.optimize.call(self, compressor);
|
|
||||||
if (self instanceof AST_While) {
|
|
||||||
if_break_in_loop(self, compressor);
|
|
||||||
self = make_node(AST_For, self, self).transform(compressor);
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
});
|
|
||||||
|
|
||||||
OPT(AST_For, function(self, compressor){
|
OPT(AST_For, function(self, compressor){
|
||||||
var cond = self.condition;
|
var cond = self.condition;
|
||||||
if (cond) {
|
if (cond) {
|
||||||
|
|||||||
@@ -187,3 +187,32 @@ keep_collapse_const_in_own_block_scope_2: {
|
|||||||
console.log(c);
|
console.log(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
evaluate: {
|
||||||
|
options = {
|
||||||
|
loops: true,
|
||||||
|
dead_code: true,
|
||||||
|
evaluate: true,
|
||||||
|
};
|
||||||
|
input: {
|
||||||
|
while (true) {
|
||||||
|
a();
|
||||||
|
}
|
||||||
|
while (false) {
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
c();
|
||||||
|
} while (true);
|
||||||
|
do {
|
||||||
|
d();
|
||||||
|
} while (false);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
for(;;)
|
||||||
|
a();
|
||||||
|
for(;;)
|
||||||
|
c();
|
||||||
|
d();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user