screw_ie8 : true,
sequences : !false_by_default,
side_effects : !false_by_default,
+ switches : !false_by_default,
top_retain : null,
toplevel : !!(options && options["top_retain"]),
unsafe : false,
stat.value = cons_seq(stat.value);
}
else if (stat instanceof AST_Exit) {
- stat.value = cons_seq(make_node(AST_Undefined, stat));
+ stat.value = cons_seq(make_node(AST_Undefined, stat).transform(compressor));
}
else if (stat instanceof AST_Switch) {
stat.expression = cons_seq(stat.expression);
});
OPT(AST_Switch, function(self, compressor){
+ if (!compressor.option("switches")) return self;
var branch;
var value = self.expression.evaluate(compressor);
if (value !== self.expression) {
has_break = true;
});
self.walk(tw);
- if (!has_break) return make_node(AST_BlockStatement, self, body[0]).optimize(compressor);
+ if (!has_break) {
+ body = body[0].body.slice();
+ body.unshift(make_node(AST_SimpleStatement, self.expression, {
+ body: self.expression
+ }));
+ return make_node(AST_BlockStatement, self, {
+ body: body
+ }).optimize(compressor);
+ }
}
return self;
if (name instanceof AST_SymbolRef
&& name.name == "console"
&& name.undeclared()) {
- return make_node(AST_Undefined, self).transform(compressor);
+ return make_node(AST_Undefined, self).optimize(compressor);
}
}
}
}
expect_stdout: "true"
}
+
+issue_1758: {
+ options = {
+ sequences: true,
+ side_effects: true,
+ }
+ input: {
+ console.log(function(c) {
+ var undefined = 42;
+ return function() {
+ c--;
+ c--, c.toString();
+ return;
+ }();
+ }());
+ }
+ expect: {
+ console.log(function(c) {
+ var undefined = 42;
+ return function() {
+ return c--, c--, c.toString(), void 0;
+ }();
+ }());
+ }
+ expect_stdout: "undefined"
+}
constant_switch_1: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
switch (1+1) {
case 1: foo(); break;
}
constant_switch_2: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
switch (1) {
case 1: foo();
}
constant_switch_3: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
switch (10) {
case 1: foo();
}
constant_switch_4: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
switch (2) {
case 1:
}
constant_switch_5: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
switch (1) {
case 1:
}
constant_switch_6: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
OUT: {
foo();
}
constant_switch_7: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
OUT: {
foo();
}
constant_switch_8: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
OUT: switch (1) {
case 1:
}
constant_switch_9: {
- options = { dead_code: true, evaluate: true };
+ options = {
+ dead_code: true,
+ evaluate: true,
+ side_effects: true,
+ switches: true,
+ }
input: {
OUT: switch (1) {
case 1:
}
drop_default_1: {
- options = { dead_code: true };
+ options = {
+ dead_code: true,
+ switches: true,
+ }
input: {
switch (foo) {
case 'bar': baz();
}
drop_default_2: {
- options = { dead_code: true };
+ options = {
+ dead_code: true,
+ switches: true,
+ }
input: {
switch (foo) {
case 'bar': baz(); break;
}
keep_default: {
- options = { dead_code: true };
+ options = {
+ dead_code: true,
+ switches: true,
+ }
input: {
switch (foo) {
case 'bar': baz();
options = {
dead_code: true,
evaluate: true,
+ side_effects: true,
+ switches: true,
}
input: {
var a = 100, b = 10;
drop_case: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (foo) {
keep_case: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (foo) {
options = {
dead_code: true,
evaluate: true,
+ switches: true,
}
input: {
switch (true) {
issue_441_1: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (foo) {
issue_441_2: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (foo) {
options = {
dead_code: true,
evaluate: true,
+ side_effects: true,
+ switches: true,
}
input: {
switch (0) {
options = {
dead_code: true,
evaluate: true,
+ switches: true,
}
input: {
var a = 100, b = 10;
options = {
dead_code: true,
evaluate: true,
+ switches: true,
}
input: {
function f(x) {
issue_1680_2: {
options = {
dead_code: true,
+ switches: true,
}
input: {
var a = 100, b = 10;
issue_1690_1: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (console.log("PASS")) {}
issue_1690_2: {
options = {
dead_code: false,
+ switches: true,
}
input: {
switch (console.log("PASS")) {}
conditionals: true,
dead_code: true,
side_effects: true,
+ switches: true,
}
input: {
if (a) switch(typeof b) {}
issue_1698: {
options = {
side_effects: true,
+ switches: true,
}
input: {
var a = 1;
issue_1705_1: {
options = {
dead_code: true,
+ switches: true,
}
input: {
var a = 0;
reduce_vars: true,
sequences: true,
side_effects: true,
+ switches: true,
toplevel: true,
unused: true,
}
issue_1705_3: {
options = {
dead_code: true,
+ switches: true,
}
input: {
switch (a) {
"}",
]
}
+
+issue_1758: {
+ options = {
+ dead_code: true,
+ switches: true,
+ }
+ input: {
+ var a = 1, b = 2;
+ switch (a--) {
+ default:
+ b++;
+ }
+ console.log(a, b);
+ }
+ expect: {
+ var a = 1, b = 2;
+ a--;
+ b++;
+ console.log(a, b);
+ }
+ expect_stdout: "0 3"
+}