@@ -1698,6 +1698,8 @@ merge(Compressor.prototype, {
|
|||||||
|
|
||||||
function join_object_assignments(defn, body) {
|
function join_object_assignments(defn, body) {
|
||||||
if (!(defn instanceof AST_Definitions)) return;
|
if (!(defn instanceof AST_Definitions)) return;
|
||||||
|
var def = defn.definitions[defn.definitions.length - 1];
|
||||||
|
if (!(def.value instanceof AST_Object)) return;
|
||||||
var exprs;
|
var exprs;
|
||||||
if (body instanceof AST_Assign) {
|
if (body instanceof AST_Assign) {
|
||||||
exprs = [ body ];
|
exprs = [ body ];
|
||||||
@@ -1705,17 +1707,14 @@ merge(Compressor.prototype, {
|
|||||||
exprs = body.expressions.slice();
|
exprs = body.expressions.slice();
|
||||||
}
|
}
|
||||||
if (!exprs) return;
|
if (!exprs) return;
|
||||||
|
var trimmed = false;
|
||||||
do {
|
do {
|
||||||
var node = exprs[0];
|
var node = exprs[0];
|
||||||
if (!(node instanceof AST_Assign)) break;
|
if (!(node instanceof AST_Assign)) break;
|
||||||
if (!(node.left instanceof AST_PropAccess)) break;
|
if (!(node.left instanceof AST_PropAccess)) break;
|
||||||
var sym = node.left.expression;
|
var sym = node.left.expression;
|
||||||
if (!(sym instanceof AST_SymbolRef)) break;
|
if (!(sym instanceof AST_SymbolRef)) break;
|
||||||
var def = find_if(function(def) {
|
if (def.name.name != sym.name) break;
|
||||||
return def.name.name == sym.name
|
|
||||||
&& def.value instanceof AST_Object;
|
|
||||||
}, defn.definitions);
|
|
||||||
if (!def) break;
|
|
||||||
if (!node.right.is_constant_expression(scope)) break;
|
if (!node.right.is_constant_expression(scope)) break;
|
||||||
var prop = node.left.property;
|
var prop = node.left.property;
|
||||||
if (prop instanceof AST_Node) {
|
if (prop instanceof AST_Node) {
|
||||||
@@ -1727,8 +1726,9 @@ merge(Compressor.prototype, {
|
|||||||
value: node.right
|
value: node.right
|
||||||
}));
|
}));
|
||||||
exprs.shift();
|
exprs.shift();
|
||||||
|
trimmed = true;
|
||||||
} while (exprs.length);
|
} while (exprs.length);
|
||||||
return exprs;
|
return trimmed && exprs;
|
||||||
}
|
}
|
||||||
|
|
||||||
function join_consecutive_vars(statements, compressor) {
|
function join_consecutive_vars(statements, compressor) {
|
||||||
@@ -1766,14 +1766,11 @@ merge(Compressor.prototype, {
|
|||||||
} else if (stat instanceof AST_SimpleStatement) {
|
} else if (stat instanceof AST_SimpleStatement) {
|
||||||
var exprs = join_object_assignments(prev, stat.body);
|
var exprs = join_object_assignments(prev, stat.body);
|
||||||
if (exprs) {
|
if (exprs) {
|
||||||
if (exprs.length > 0) {
|
|
||||||
stat.body = make_sequence(stat.body, exprs);
|
|
||||||
statements[++j] = stat;
|
|
||||||
}
|
|
||||||
CHANGED = true;
|
CHANGED = true;
|
||||||
} else {
|
if (!exprs.length) continue;
|
||||||
statements[++j] = stat;
|
stat.body = make_sequence(stat.body, exprs);
|
||||||
}
|
}
|
||||||
|
statements[++j] = stat;
|
||||||
} else {
|
} else {
|
||||||
statements[++j] = stat;
|
statements[++j] = stat;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1162,3 +1162,29 @@ join_object_assignments_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "1 4 6"
|
expect_stdout: "1 4 6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
join_object_assignments_3: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
join_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
console.log(function() {
|
||||||
|
var o = {
|
||||||
|
a: "PASS",
|
||||||
|
}, a = o.a;
|
||||||
|
o.a = "FAIL";
|
||||||
|
return a;
|
||||||
|
}());
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console.log(function() {
|
||||||
|
var o = {
|
||||||
|
a: "PASS",
|
||||||
|
}, a = o.a;
|
||||||
|
o.a = "FAIL";
|
||||||
|
return a;
|
||||||
|
}());
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user