avoid substitution of global variables (#1557)

- unless `toplevel` is enabled
- global `const` works as before
This commit is contained in:
Alex Lam S.L
2017-03-07 03:11:03 +08:00
committed by GitHub
parent 3ac2421932
commit d787d70127
3 changed files with 306 additions and 93 deletions

View File

@@ -6,6 +6,7 @@ reduce_vars: {
C : 0
},
reduce_vars : true,
toplevel : true,
unused : true
}
input: {
@@ -452,22 +453,26 @@ multi_def_2: {
reduce_vars: true,
}
input: {
if (code == 16)
var bitsLength = 2, bitsOffset = 3, what = len;
else if (code == 17)
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
else if (code == 18)
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
var repeatLength = this.getBits(bitsLength) + bitsOffset;
function f(){
if (code == 16)
var bitsLength = 2, bitsOffset = 3, what = len;
else if (code == 17)
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
else if (code == 18)
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
var repeatLength = this.getBits(bitsLength) + bitsOffset;
}
}
expect: {
if (16 == code)
var bitsLength = 2, bitsOffset = 3, what = len;
else if (17 == code)
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
else if (18 == code)
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
var repeatLength = this.getBits(bitsLength) + bitsOffset;
function f(){
if (16 == code)
var bitsLength = 2, bitsOffset = 3, what = len;
else if (17 == code)
var bitsLength = 3, bitsOffset = 3, what = (len = 0);
else if (18 == code)
var bitsLength = 7, bitsOffset = 11, what = (len = 0);
var repeatLength = this.getBits(bitsLength) + bitsOffset;
}
}
}
@@ -477,12 +482,16 @@ use_before_var: {
reduce_vars: true,
}
input: {
console.log(t);
var t = 1;
function f(){
console.log(t);
var t = 1;
}
}
expect: {
console.log(t);
var t = 1;
function f(){
console.log(t);
var t = 1;
}
}
}
@@ -492,22 +501,20 @@ inner_var_if: {
reduce_vars: true,
}
input: {
function f(){
return 0;
function f(a){
if (a)
var t = 1;
if (!t)
console.log(t);
}
if (f())
var t = 1;
if (!t)
console.log(t);
}
expect: {
function f(){
return 0;
function f(a){
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,
}
input: {
function f(){
return 1;
function f(a){
l: {
if (a) break l;
var t = 1;
}
console.log(t);
}
l: {
if (f()) break l;
var t = 1;
}
console.log(t);
}
expect: {
function f(){
return 1;
function f(a){
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,
}
input: {
var a = 1;
x(a, b, d);
for (var b = 2, c = 3; x(a, b, c, d); x(a, b, c, d)) {
var d = 4, e = 5;
function f() {
var a = 1;
x(a, b, d);
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)
}
expect: {
var a = 1;
x(1, b, d);
for (var b = 2, c = 3; x(1, b, 3, d); x(1, b, 3, d)) {
var d = 4, e = 5;
function f() {
var a = 1;
x(1, b, d);
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);
}
}
@@ -569,24 +578,28 @@ inner_var_for_in_1: {
reduce_vars: true,
}
input: {
var a = 1, b = 2;
for (b in (function() {
return x(a, b, c);
})()) {
var c = 3, d = 4;
function f() {
var a = 1, b = 2;
for (b in (function() {
return x(a, b, c);
})()) {
var c = 3, d = 4;
x(a, b, c, d);
}
x(a, b, c, d);
}
x(a, b, c, d);
}
expect: {
var a = 1, b = 2;
for (b in (function() {
return x(1, b, c);
})()) {
var c = 3, d = 4;
function f() {
var a = 1, b = 2;
for (b in (function() {
return x(1, b, c);
})()) {
var c = 3, d = 4;
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,
}
input: {
for (var long_name in {})
console.log(long_name);
function f() {
for (var long_name in {})
console.log(long_name);
}
}
expect: {
for (var long_name in {})
console.log(long_name);
function f() {
for (var long_name in {})
console.log(long_name);
}
}
}
@@ -611,20 +628,24 @@ inner_var_catch: {
reduce_vars: true,
}
input: {
try {
a();
} catch (e) {
var b = 1;
function f() {
try {
a();
} catch (e) {
var b = 1;
}
console.log(b);
}
console.log(b);
}
expect: {
try {
a();
} catch (e) {
var b = 1;
function f() {
try {
a();
} catch (e) {
var b = 1;
}
console.log(b);
}
console.log(b);
}
}
@@ -634,14 +655,18 @@ issue_1533_1: {
reduce_vars: true,
}
input: {
var id = "";
for (id in {break: "me"})
console.log(id);
function f() {
var id = "";
for (id in {break: "me"})
console.log(id);
}
}
expect: {
var id = "";
for (id in {break: "me"})
console.log(id);
function f() {
var id = "";
for (id in {break: "me"})
console.log(id);
}
}
}
@@ -651,15 +676,196 @@ issue_1533_2: {
reduce_vars: true,
}
input: {
var id = "";
for (var id in {break: "me"})
function f() {
var id = "";
for (var id in {break: "me"})
console.log(id);
console.log(id);
console.log(id);
}
}
expect: {
var id = "";
for (var id in {break: "me"})
function f() {
var id = "";
for (var id in {break: "me"})
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();
}
}