collapse a.b whenever safe (#2350)

This commit is contained in:
Alex Lam S.L
2017-10-08 13:17:48 +08:00
committed by GitHub
parent 6920e898d1
commit 1abe14296e
2 changed files with 70 additions and 3 deletions

View File

@@ -812,7 +812,7 @@ merge(Compressor.prototype, {
var sym; var sym;
if (node instanceof AST_Call if (node instanceof AST_Call
|| node instanceof AST_Exit || node instanceof AST_Exit
|| node instanceof AST_PropAccess || node instanceof AST_PropAccess && node.has_side_effects(compressor)
|| node instanceof AST_SymbolRef || node instanceof AST_SymbolRef
&& (lvalues[node.name] && (lvalues[node.name]
|| side_effects && !references_in_scope(node.definition())) || side_effects && !references_in_scope(node.definition()))

View File

@@ -1834,9 +1834,9 @@ issue_1858: {
} }
expect: { expect: {
console.log(function(x) { console.log(function(x) {
var a = {}, b = a.b = x; var a = {}, b = a.b = 1;
return a.b + b; return a.b + b;
}(1)); }());
} }
expect_stdout: "2" expect_stdout: "2"
} }
@@ -2521,3 +2521,70 @@ issue_2319_3: {
} }
expect_stdout: "true" expect_stdout: "true"
} }
prop_side_effects_1: {
options = {
collapse_vars: true,
evaluate: true,
pure_getters: "strict",
reduce_vars: true,
toplevel: true,
unsafe: true,
unused: true,
}
input: {
var C = 1;
console.log(C);
var obj = {
bar: function() {
return C + C;
}
};
console.log(obj.bar());
}
expect: {
console.log(1);
console.log({
bar: function() {
return 2;
}
}.bar());
}
expect_stdout: [
"1",
"2",
]
}
prop_side_effects_2: {
options = {
collapse_vars: true,
evaluate: true,
inline: true,
passes: 2,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
toplevel: true,
unsafe: true,
unused: true,
}
input: {
var C = 1;
console.log(C);
var obj = {
bar: function() {
return C + C;
}
};
console.log(obj.bar());
}
expect: {
console.log(1);
console.log(2);
}
expect_stdout: [
"1",
"2",
]
}