diff options
-rw-r--r-- | lib/compress.js | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/lib/compress.js b/lib/compress.js index 2f286545..7440a5bd 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -317,124 +317,6 @@ function Compressor(options, false_by_default) { return ret; }; - /// XXX: this function is UGLY and kinda wrong. - /// I think it would be cleaner if it operates backwards. - function handle_if_return_2(statements, compressor) { - var self = compressor.self(); - var in_lambda = self instanceof AST_Lambda; - var last = statements.length - 1; - return MAP(statements, function(stat, i){ - if (stat instanceof AST_If - && stat.body instanceof AST_Continue - && !stat.alternative - && self === stat.body.target()) { - CHANGED = true; - if (i < last) { - var rest = statements.slice(i + 1); - var cond = stat.condition; - while (rest[0] instanceof AST_If - && rest[0].body instanceof AST_Continue - && self === rest[0].body.target() - && !rest[0].alternative) { - cond = make_node(AST_Binary, rest[0], { - operator: "||", - left: cond, - right: rest[0].condition - }); - rest.shift(); - } - return MAP.last(make_node(AST_If, stat, { - condition: cond.negate(compressor), - body: make_node(AST_BlockStatement, stat, { - body: rest - }).optimize(compressor) - }).optimize(compressor)) - } else { - return make_node(AST_SimpleStatement, stat, { - body: stat.condition - }).optimize(compressor); - } - } - if (stat instanceof AST_If - && stat.body instanceof AST_Return - && !stat.alternative - && in_lambda) { - if (!stat.body.value) { - CHANGED = true; - if (i < last) { - var rest = statements.slice(i + 1); - var cond = stat.condition; - while (rest[0] instanceof AST_If - && rest[0].body instanceof AST_Return - && !rest[0].body.value - && !rest[0].alternative) { - cond = make_node(AST_Binary, rest[0], { - operator: "||", - left: cond, - right: rest[0].condition - }); - rest.shift(); - } - return MAP.last(make_node(AST_If, stat, { - condition: cond.negate(compressor), - body: make_node(AST_BlockStatement, stat, { - body: rest - }).optimize(compressor) - }).optimize(compressor)); - } else { - return make_node(AST_SimpleStatement, stat, { - body: stat.condition - }).optimize(compressor); - } - } else if (i == last && last > 0 - && statements[last - 1] instanceof AST_If - && statements[last - 1].body instanceof AST_Return - && !statements[last - 1].alternative) { - CHANGED = true; - return MAP.splice([ stat, make_node(AST_Return, stat, { - value: make_node(AST_Undefined, stat).optimize(compressor) - }).optimize(compressor)]); - } - } - if (stat instanceof AST_If - && stat.body instanceof AST_Exit - && stat.body.value - && !stat.alternative - && i < last - && statements[i + 1].TYPE == stat.body.TYPE - && statements[i + 1].value) { - CHANGED = true; - return MAP.last(make_node(AST_If, stat, { - condition: stat.condition, - body: stat.body, - alternative: statements[i + 1] - }).optimize(compressor)); - } - if (stat instanceof AST_If - && stat.alternative instanceof AST_Exit) { - CHANGED = true; - return MAP.last(MAP.splice([ - // 1. negate IF and put the exit in the consequent - make_node(AST_If, stat, { - condition: stat.condition.negate(compressor), - body: stat.alternative - }), - // 2. the IF body can now go outside the if - stat.body - // and 3. add the rest of the statements - ].concat(statements.slice(i + 1)))); - return MAP.last(make_node(AST_If, stat, { - condition: stat.condition.negate(compressor), - body: stat.alternative, - alternative: make_node(AST_BlockStatement, stat.body, { - body: [ stat.body ].concat(statements.slice(i + 1)) - }) - }).optimize(compressor)); - } - return stat; - }); - }; - function eliminate_dead_code(statements, compressor) { var has_quit = false; return statements.reduce(function(a, stat){ |