avoid substitution of global variables (#1557)
- unless `toplevel` is enabled - global `const` works as before
This commit is contained in:
@@ -223,6 +223,7 @@ merge(Compressor.prototype, {
|
|||||||
|
|
||||||
AST_Node.DEFMETHOD("reset_opt_flags", function(compressor, rescan){
|
AST_Node.DEFMETHOD("reset_opt_flags", function(compressor, rescan){
|
||||||
var reduce_vars = rescan && compressor.option("reduce_vars");
|
var reduce_vars = rescan && compressor.option("reduce_vars");
|
||||||
|
var toplevel = compressor.option("toplevel");
|
||||||
var ie8 = !compressor.option("screw_ie8");
|
var ie8 = !compressor.option("screw_ie8");
|
||||||
var safe_ids = [];
|
var safe_ids = [];
|
||||||
push();
|
push();
|
||||||
@@ -334,7 +335,11 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function reset_def(def) {
|
function reset_def(def) {
|
||||||
def.fixed = undefined;
|
if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
|
||||||
|
def.fixed = undefined;
|
||||||
|
} else {
|
||||||
|
def.fixed = false;
|
||||||
|
}
|
||||||
def.references = [];
|
def.references = [];
|
||||||
def.should_replace = undefined;
|
def.should_replace = undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ dead_code_const_annotation: {
|
|||||||
conditionals : true,
|
conditionals : true,
|
||||||
evaluate : true,
|
evaluate : true,
|
||||||
reduce_vars : true,
|
reduce_vars : true,
|
||||||
|
toplevel : true,
|
||||||
};
|
};
|
||||||
input: {
|
input: {
|
||||||
var unused;
|
var unused;
|
||||||
@@ -172,6 +173,7 @@ dead_code_const_annotation_complex_scope: {
|
|||||||
conditionals : true,
|
conditionals : true,
|
||||||
evaluate : true,
|
evaluate : true,
|
||||||
reduce_vars : true,
|
reduce_vars : true,
|
||||||
|
toplevel : true,
|
||||||
};
|
};
|
||||||
input: {
|
input: {
|
||||||
var unused_var;
|
var unused_var;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ reduce_vars: {
|
|||||||
C : 0
|
C : 0
|
||||||
},
|
},
|
||||||
reduce_vars : true,
|
reduce_vars : true,
|
||||||
|
toplevel : true,
|
||||||
unused : true
|
unused : true
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
@@ -452,22 +453,26 @@ multi_def_2: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
if (code == 16)
|
function f(){
|
||||||
var bitsLength = 2, bitsOffset = 3, what = len;
|
if (code == 16)
|
||||||
else if (code == 17)
|
var bitsLength = 2, bitsOffset = 3, what = len;
|
||||||
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
|
else if (code == 17)
|
||||||
else if (code == 18)
|
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
|
||||||
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
|
else if (code == 18)
|
||||||
var repeatLength = this.getBits(bitsLength) + bitsOffset;
|
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
|
||||||
|
var repeatLength = this.getBits(bitsLength) + bitsOffset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
if (16 == code)
|
function f(){
|
||||||
var bitsLength = 2, bitsOffset = 3, what = len;
|
if (16 == code)
|
||||||
else if (17 == code)
|
var bitsLength = 2, bitsOffset = 3, what = len;
|
||||||
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
|
else if (17 == code)
|
||||||
else if (18 == code)
|
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
|
||||||
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
|
else if (18 == code)
|
||||||
var repeatLength = this.getBits(bitsLength) + bitsOffset;
|
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
|
||||||
|
var repeatLength = this.getBits(bitsLength) + bitsOffset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -477,12 +482,16 @@ use_before_var: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
console.log(t);
|
function f(){
|
||||||
var t = 1;
|
console.log(t);
|
||||||
|
var t = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(t);
|
function f(){
|
||||||
var t = 1;
|
console.log(t);
|
||||||
|
var t = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -492,22 +501,20 @@ inner_var_if: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
function f(){
|
function f(a){
|
||||||
return 0;
|
if (a)
|
||||||
|
var t = 1;
|
||||||
|
if (!t)
|
||||||
|
console.log(t);
|
||||||
}
|
}
|
||||||
if (f())
|
|
||||||
var t = 1;
|
|
||||||
if (!t)
|
|
||||||
console.log(t);
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
function f(){
|
function f(a){
|
||||||
return 0;
|
if (a)
|
||||||
|
var t = 1;
|
||||||
|
if (!t)
|
||||||
|
console.log(t);
|
||||||
}
|
}
|
||||||
if (f())
|
|
||||||
var t = 1;
|
|
||||||
if (!t)
|
|
||||||
console.log(t);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,24 +524,22 @@ inner_var_label: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
function f(){
|
function f(a){
|
||||||
return 1;
|
l: {
|
||||||
|
if (a) break l;
|
||||||
|
var t = 1;
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
}
|
}
|
||||||
l: {
|
|
||||||
if (f()) break l;
|
|
||||||
var t = 1;
|
|
||||||
}
|
|
||||||
console.log(t);
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
function f(){
|
function f(a){
|
||||||
return 1;
|
l: {
|
||||||
|
if (a) break l;
|
||||||
|
var t = 1;
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
}
|
}
|
||||||
l: {
|
|
||||||
if (f()) break l;
|
|
||||||
var t = 1;
|
|
||||||
}
|
|
||||||
console.log(t);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,22 +549,26 @@ inner_var_for: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
var a = 1;
|
function f() {
|
||||||
x(a, b, d);
|
var a = 1;
|
||||||
for (var b = 2, c = 3; x(a, b, c, d); x(a, b, c, d)) {
|
x(a, b, d);
|
||||||
var d = 4, e = 5;
|
for (var b = 2, c = 3; x(a, b, c, d); x(a, b, c, d)) {
|
||||||
|
var d = 4, e = 5;
|
||||||
|
x(a, b, c, d, e);
|
||||||
|
}
|
||||||
x(a, b, c, d, e);
|
x(a, b, c, d, e);
|
||||||
}
|
}
|
||||||
x(a, b, c, d, e)
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var a = 1;
|
function f() {
|
||||||
x(1, b, d);
|
var a = 1;
|
||||||
for (var b = 2, c = 3; x(1, b, 3, d); x(1, b, 3, d)) {
|
x(1, b, d);
|
||||||
var d = 4, e = 5;
|
for (var b = 2, c = 3; x(1, b, 3, d); x(1, b, 3, d)) {
|
||||||
|
var d = 4, e = 5;
|
||||||
|
x(1, b, 3, d, e);
|
||||||
|
}
|
||||||
x(1, b, 3, d, e);
|
x(1, b, 3, d, e);
|
||||||
}
|
}
|
||||||
x(1, b, 3, d, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -569,24 +578,28 @@ inner_var_for_in_1: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
var a = 1, b = 2;
|
function f() {
|
||||||
for (b in (function() {
|
var a = 1, b = 2;
|
||||||
return x(a, b, c);
|
for (b in (function() {
|
||||||
})()) {
|
return x(a, b, c);
|
||||||
var c = 3, d = 4;
|
})()) {
|
||||||
|
var c = 3, d = 4;
|
||||||
|
x(a, b, c, d);
|
||||||
|
}
|
||||||
x(a, b, c, d);
|
x(a, b, c, d);
|
||||||
}
|
}
|
||||||
x(a, b, c, d);
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var a = 1, b = 2;
|
function f() {
|
||||||
for (b in (function() {
|
var a = 1, b = 2;
|
||||||
return x(1, b, c);
|
for (b in (function() {
|
||||||
})()) {
|
return x(1, b, c);
|
||||||
var c = 3, d = 4;
|
})()) {
|
||||||
|
var c = 3, d = 4;
|
||||||
|
x(1, b, c, d);
|
||||||
|
}
|
||||||
x(1, b, c, d);
|
x(1, b, c, d);
|
||||||
}
|
}
|
||||||
x(1, b, c, d);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,12 +609,16 @@ inner_var_for_in_2: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
for (var long_name in {})
|
function f() {
|
||||||
console.log(long_name);
|
for (var long_name in {})
|
||||||
|
console.log(long_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
for (var long_name in {})
|
function f() {
|
||||||
console.log(long_name);
|
for (var long_name in {})
|
||||||
|
console.log(long_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -611,20 +628,24 @@ inner_var_catch: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
try {
|
function f() {
|
||||||
a();
|
try {
|
||||||
} catch (e) {
|
a();
|
||||||
var b = 1;
|
} catch (e) {
|
||||||
|
var b = 1;
|
||||||
|
}
|
||||||
|
console.log(b);
|
||||||
}
|
}
|
||||||
console.log(b);
|
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
try {
|
function f() {
|
||||||
a();
|
try {
|
||||||
} catch (e) {
|
a();
|
||||||
var b = 1;
|
} catch (e) {
|
||||||
|
var b = 1;
|
||||||
|
}
|
||||||
|
console.log(b);
|
||||||
}
|
}
|
||||||
console.log(b);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -634,14 +655,18 @@ issue_1533_1: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
var id = "";
|
function f() {
|
||||||
for (id in {break: "me"})
|
var id = "";
|
||||||
console.log(id);
|
for (id in {break: "me"})
|
||||||
|
console.log(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var id = "";
|
function f() {
|
||||||
for (id in {break: "me"})
|
var id = "";
|
||||||
console.log(id);
|
for (id in {break: "me"})
|
||||||
|
console.log(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -651,15 +676,196 @@ issue_1533_2: {
|
|||||||
reduce_vars: true,
|
reduce_vars: true,
|
||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
var id = "";
|
function f() {
|
||||||
for (var id in {break: "me"})
|
var id = "";
|
||||||
|
for (var id in {break: "me"})
|
||||||
|
console.log(id);
|
||||||
console.log(id);
|
console.log(id);
|
||||||
console.log(id);
|
}
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
var id = "";
|
function f() {
|
||||||
for (var id in {break: "me"})
|
var id = "";
|
||||||
|
for (var id in {break: "me"})
|
||||||
|
console.log(id);
|
||||||
console.log(id);
|
console.log(id);
|
||||||
console.log(id);
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_on: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var x = 3;
|
||||||
|
console.log(x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console.log(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_off: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:false,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var x = 3;
|
||||||
|
console.log(x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var x = 3;
|
||||||
|
console.log(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_on_loops_1: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:", --x);
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:", --x);
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_off_loops_1: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:false,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:", --x);
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:", --x);
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_on_loops_2: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:");
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:");
|
||||||
|
}
|
||||||
|
for (;;) bar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_off_loops_2: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:false,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:");
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function bar() {
|
||||||
|
console.log("bar:");
|
||||||
|
}
|
||||||
|
var x = 3;
|
||||||
|
do
|
||||||
|
bar();
|
||||||
|
while (x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_on_loops_3: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var x = 3;
|
||||||
|
while (x) bar();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
for (;;) bar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toplevel_off_loops_3: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
loops: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
toplevel:false,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var x = 3;
|
||||||
|
while (x) bar();
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var x = 3;
|
||||||
|
for (;x;) bar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user