compressor.warn("Dropping unused variable {name} [{file}:{line},{col}]", w);
return false;
});
- var side_effects = [];
+ // place uninitialized names at the start
def = mergeSort(def, function(a, b){
if (!a.value && b.value) return -1;
if (!b.value && a.value) return 1;
return 0;
});
- while (def.length > 0 && def[def.length - 1]._unused_side_effects) {
- side_effects.unshift(def.pop().value);
+ // for unused names whose initialization has
+ // side effects, we can cascade the init. code
+ // into the next one, or next statement.
+ var side_effects = [];
+ for (var i = 0; i < def.length;) {
+ var x = def[i];
+ if (x._unused_side_effects) {
+ side_effects.push(x.value);
+ def.splice(i, 1);
+ } else {
+ if (side_effects.length > 0) {
+ side_effects.push(x.value);
+ x.value = AST_Seq.from_array(side_effects);
+ side_effects = [];
+ }
+ ++i;
+ }
}
if (side_effects.length > 0) {
side_effects = make_node(AST_BlockStatement, node, {
- body: side_effects.map(function(ss){
- return make_node(AST_SimpleStatement, ss, { body: ss });
- })
+ body: [ make_node(AST_SimpleStatement, node, {
+ body: AST_Seq.from_array(side_effects)
+ }) ]
});
} else {
side_effects = null;