1144 lines
22 KiB
JavaScript
1144 lines
22 KiB
JavaScript
issue_2377_1: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var obj = {
|
|
foo: 1,
|
|
bar: 2,
|
|
square: function(x) {
|
|
return x * x;
|
|
},
|
|
cube: function(x) {
|
|
return x * x * x;
|
|
},
|
|
};
|
|
console.log(obj.foo, obj.cube(3));
|
|
}
|
|
expect: {
|
|
var obj_foo = 1, obj_cube = function(x) {
|
|
return x * x * x;
|
|
};
|
|
console.log(obj_foo, obj_cube(3));
|
|
}
|
|
expect_stdout: "1 27"
|
|
}
|
|
|
|
issue_2377_2: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 2,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var obj = {
|
|
foo: 1,
|
|
bar: 2,
|
|
square: function(x) {
|
|
return x * x;
|
|
},
|
|
cube: function(x) {
|
|
return x * x * x;
|
|
},
|
|
};
|
|
console.log(obj.foo, obj.cube(3));
|
|
}
|
|
expect: {
|
|
console.log(1, (x = 3, x * x * x));
|
|
var x;
|
|
}
|
|
expect_stdout: "1 27"
|
|
}
|
|
|
|
issue_2377_3: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 4,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var obj = {
|
|
foo: 1,
|
|
bar: 2,
|
|
square: function(x) {
|
|
return x * x;
|
|
},
|
|
cube: function(x) {
|
|
return x * x * x;
|
|
},
|
|
};
|
|
console.log(obj.foo, obj.cube(3));
|
|
}
|
|
expect: {
|
|
console.log(1, 27);
|
|
}
|
|
expect_stdout: "1 27"
|
|
}
|
|
|
|
direct_access_1: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var a = 0;
|
|
var obj = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
for (var k in obj) a++;
|
|
console.log(a, obj.a);
|
|
}
|
|
expect: {
|
|
var a = 0;
|
|
var obj = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
for (var k in obj) a++;
|
|
console.log(a, obj.a);
|
|
}
|
|
expect_stdout: "2 1"
|
|
}
|
|
|
|
direct_access_2: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = { a: 1 };
|
|
var f = function(k) {
|
|
if (o[k]) return "PASS";
|
|
};
|
|
console.log(f("a"));
|
|
}
|
|
expect: {
|
|
var o = { a: 1 };
|
|
console.log(function(k) {
|
|
if (o[k]) return "PASS";
|
|
}("a"));
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
direct_access_3: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = { a: 1 };
|
|
o.b;
|
|
console.log(o.a);
|
|
}
|
|
expect: {
|
|
var o = { a: 1 };
|
|
o.b;
|
|
console.log(o.a);
|
|
}
|
|
expect_stdout: "1"
|
|
}
|
|
|
|
single_use: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var obj = {
|
|
bar: function() {
|
|
return 42;
|
|
},
|
|
};
|
|
console.log(obj.bar());
|
|
}
|
|
expect: {
|
|
console.log({
|
|
bar: function() {
|
|
return 42;
|
|
},
|
|
}.bar());
|
|
}
|
|
}
|
|
|
|
name_collision_1: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
var obj_foo = 1;
|
|
var obj_bar = 2;
|
|
function f() {
|
|
var obj = {
|
|
foo: 3,
|
|
bar: 4,
|
|
"b-r": 5,
|
|
"b+r": 6,
|
|
"b!r": 7,
|
|
};
|
|
console.log(obj_foo, obj.foo, obj.bar, obj["b-r"], obj["b+r"], obj["b!r"]);
|
|
}
|
|
f();
|
|
}
|
|
expect: {
|
|
var obj_foo = 1;
|
|
var obj_bar = 2;
|
|
function f() {
|
|
var obj_foo$0 = 3,
|
|
obj_bar = 4,
|
|
obj_b_r = 5,
|
|
obj_b_r$0 = 6,
|
|
obj_b_r$1 = 7;
|
|
console.log(obj_foo, obj_foo$0, obj_bar, obj_b_r, obj_b_r$0, obj_b_r$1);
|
|
}
|
|
f();
|
|
}
|
|
expect_stdout: "1 3 4 5 6 7"
|
|
}
|
|
|
|
name_collision_2: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
p: 1,
|
|
"+": function(x) {
|
|
return x;
|
|
},
|
|
"-": function(x) {
|
|
return x + 1;
|
|
}
|
|
}, o__$0 = 2, o__$1 = 3;
|
|
console.log(o.p === o.p, o["+"](4), o["-"](5), o__$0, o__$1);
|
|
}
|
|
expect: {
|
|
var o_p = 1,
|
|
o__ = function(x) {
|
|
return x;
|
|
},
|
|
o__$2 = function(x) {
|
|
return x + 1;
|
|
},
|
|
o__$0 = 2,
|
|
o__$1 = 3;
|
|
console.log(o_p === o_p, o__(4), o__$2(5), o__$0, o__$1);
|
|
}
|
|
expect_stdout: "true 4 6 2 3"
|
|
}
|
|
|
|
name_collision_3: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
p: 1,
|
|
"+": function(x) {
|
|
return x;
|
|
},
|
|
"-": function(x) {
|
|
return x + 1;
|
|
}
|
|
}, o__$0 = 2, o__$1 = 3;
|
|
console.log(o.p === o.p, o["+"](4), o["-"](5));
|
|
}
|
|
expect: {
|
|
var o_p = 1,
|
|
o__ = function(x) {
|
|
return x;
|
|
},
|
|
o__$2 = function(x) {
|
|
return x + 1;
|
|
},
|
|
o__$0 = 2,
|
|
o__$1 = 3;
|
|
console.log(o_p === o_p, o__(4), o__$2(5));
|
|
}
|
|
expect_stdout: "true 4 6"
|
|
}
|
|
|
|
name_collision_4: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
console.log(function() {
|
|
var o = {
|
|
p: 0,
|
|
q: "PASS",
|
|
};
|
|
return function(o_p) {
|
|
if (!o.p) return o_p;
|
|
}(o.q);
|
|
}());
|
|
}
|
|
expect: {
|
|
console.log(function() {
|
|
var o_p$0 = 0, o_q = "PASS";
|
|
return function(o_p) {
|
|
if (!o_p$0) return o_p;
|
|
}(o_q);
|
|
}());
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
contains_this_1: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 2,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
u: function() {
|
|
return this === this;
|
|
},
|
|
p: 1
|
|
};
|
|
console.log(o.p, o.p);
|
|
}
|
|
expect: {
|
|
console.log(1, 1);
|
|
}
|
|
expect_stdout: "1 1"
|
|
}
|
|
|
|
contains_this_2: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 2,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
u: function() {
|
|
return this === this;
|
|
},
|
|
p: 1
|
|
};
|
|
console.log(o.p, o.p, o.u);
|
|
}
|
|
expect: {
|
|
console.log(1, 1, function() {
|
|
return this === this;
|
|
});
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
contains_this_3: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 2,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
u: function() {
|
|
return this === this;
|
|
},
|
|
p: 1
|
|
};
|
|
console.log(o.p, o.p, o.u());
|
|
}
|
|
expect: {
|
|
var o = {
|
|
u: function() {
|
|
return this === this;
|
|
},
|
|
p: 1
|
|
};
|
|
console.log(o.p, o.p, o.u());
|
|
}
|
|
expect_stdout: "1 1 true"
|
|
}
|
|
|
|
new_this: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
passes: 2,
|
|
reduce_funcs: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: 1,
|
|
b: 2,
|
|
f: function(a) {
|
|
this.b = a;
|
|
}
|
|
};
|
|
console.log(new o.f(o.a).b, o.b);
|
|
}
|
|
expect: {
|
|
console.log(new function(a) {
|
|
this.b = a;
|
|
}(1).b, 2);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_2473_1: {
|
|
options = {
|
|
hoist_props: false,
|
|
reduce_vars: true,
|
|
top_retain: [
|
|
"x",
|
|
"y"
|
|
],
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var x = {};
|
|
var y = [];
|
|
var z = {};
|
|
}
|
|
expect: {
|
|
var x = {};
|
|
var y = [];
|
|
}
|
|
}
|
|
|
|
issue_2473_2: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
top_retain: [
|
|
"x",
|
|
"y"
|
|
],
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var x = {};
|
|
var y = [];
|
|
var z = {};
|
|
}
|
|
expect: {
|
|
var x = {};
|
|
var y = [];
|
|
}
|
|
}
|
|
|
|
issue_2473_3: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
top_retain: "o",
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
console.log(o.a, o.b);
|
|
}
|
|
expect: {
|
|
var o = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
console.log(o.a, o.b);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_2473_4: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
top_retain: "o",
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
var o = {
|
|
a: 1,
|
|
b: 2,
|
|
};
|
|
console.log(o.a, o.b);
|
|
})();
|
|
}
|
|
expect: {
|
|
(function() {
|
|
var o_a = 1, o_b = 2;
|
|
console.log(o_a, o_b);
|
|
})();
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_2508_1: {
|
|
options = {
|
|
collapse_vars: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: [ 1 ],
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect: {
|
|
(function(x) {
|
|
console.log(x);
|
|
})([ 1 ]);
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
issue_2508_2: {
|
|
options = {
|
|
collapse_vars: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: { b: 2 },
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect: {
|
|
(function(x) {
|
|
console.log(x);
|
|
})({ b: 2 });
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
issue_2508_3: {
|
|
options = {
|
|
collapse_vars: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: [ o ],
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect: {
|
|
var o = {
|
|
a: [ o ],
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
issue_2508_4: {
|
|
options = {
|
|
collapse_vars: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
a: { b: o },
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect: {
|
|
var o = {
|
|
a: { b: o },
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.a);
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
issue_2508_5: {
|
|
options = {
|
|
collapse_vars: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
f: function(x) {
|
|
console.log(x);
|
|
}
|
|
};
|
|
o.f(o.f);
|
|
}
|
|
expect: {
|
|
var o_f = function(x) {
|
|
console.log(x);
|
|
};
|
|
o_f(o_f);
|
|
}
|
|
expect_stdout: true
|
|
}
|
|
|
|
issue_2519: {
|
|
options = {
|
|
collapse_vars: true,
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function testFunc() {
|
|
var dimensions = {
|
|
minX: 5,
|
|
maxX: 6,
|
|
};
|
|
var scale = 1;
|
|
var d = {
|
|
x: (dimensions.maxX + dimensions.minX) / 2,
|
|
};
|
|
return d.x * scale;
|
|
}
|
|
console.log(testFunc());
|
|
}
|
|
expect: {
|
|
function testFunc() {
|
|
return +((6 + 5) / 2);
|
|
}
|
|
console.log(testFunc());
|
|
}
|
|
expect_stdout: "5.5"
|
|
}
|
|
|
|
undefined_key: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
join_vars: true,
|
|
passes: 4,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
var a, o = {};
|
|
o[a] = 1;
|
|
o.b = 2;
|
|
console.log(o[a] + o.b);
|
|
}
|
|
expect: {
|
|
console.log(3);
|
|
}
|
|
expect_stdout: "3"
|
|
}
|
|
|
|
issue_3021: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
var a = 1, b = 2;
|
|
(function() {
|
|
b = a;
|
|
if (a++ + b--)
|
|
return 1;
|
|
return;
|
|
var b = {};
|
|
})();
|
|
console.log(a, b);
|
|
}
|
|
expect: {
|
|
var a = 1, b = 2;
|
|
(function() {
|
|
b = a;
|
|
if (a++ + b--)
|
|
return 1;
|
|
return;
|
|
var b = {};
|
|
})();
|
|
console.log(a, b);
|
|
}
|
|
expect_stdout: "2 2"
|
|
}
|
|
|
|
issue_3046: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
console.log(function(a) {
|
|
do {
|
|
var b = {
|
|
c: a++
|
|
};
|
|
} while (b.c && a);
|
|
return a;
|
|
}(0));
|
|
}
|
|
expect: {
|
|
console.log(function(a) {
|
|
do {
|
|
var b_c = a++;
|
|
} while (b_c && a);
|
|
return a;
|
|
}(0));
|
|
}
|
|
expect_stdout: "1"
|
|
}
|
|
|
|
issue_3071_1: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
join_vars: true,
|
|
passes: 3,
|
|
reduce_vars: true,
|
|
sequences: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
var obj = {};
|
|
obj.one = 1;
|
|
obj.two = 2;
|
|
console.log(obj.one, obj.two);
|
|
})();
|
|
}
|
|
expect: {
|
|
console.log(1, 2);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_3071_1_toplevel: {
|
|
options = {
|
|
evaluate: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
join_vars: true,
|
|
passes: 3,
|
|
reduce_vars: true,
|
|
sequences: true,
|
|
side_effects: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
var obj = {};
|
|
obj.one = 1;
|
|
obj.two = 2;
|
|
console.log(obj.one, obj.two);
|
|
})();
|
|
}
|
|
expect: {
|
|
console.log(1, 2);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_3071_2: {
|
|
options = {
|
|
hoist_props: true,
|
|
inline: true,
|
|
join_vars: true,
|
|
passes: 3,
|
|
reduce_vars: true,
|
|
sequences: true,
|
|
side_effects: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
obj = {};
|
|
obj.one = 1;
|
|
obj.two = 2;
|
|
console.log(obj.one, obj.two);
|
|
var obj;
|
|
})();
|
|
}
|
|
expect: {
|
|
console.log(1, 2);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_3071_2_toplevel: {
|
|
options = {
|
|
hoist_props: true,
|
|
inline: true,
|
|
join_vars: true,
|
|
passes: 3,
|
|
reduce_vars: true,
|
|
sequences: true,
|
|
side_effects: true,
|
|
toplevel: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
obj = {};
|
|
obj.one = 1;
|
|
obj.two = 2;
|
|
console.log(obj.one, obj.two);
|
|
var obj;
|
|
})();
|
|
}
|
|
expect: {
|
|
console.log(1, 2);
|
|
}
|
|
expect_stdout: "1 2"
|
|
}
|
|
|
|
issue_3071_3: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
var c = 0;
|
|
(function(a, b) {
|
|
(function f(o) {
|
|
var n = 2;
|
|
while (--b + (o = {
|
|
p: c++,
|
|
}) && --n > 0);
|
|
})();
|
|
})();
|
|
console.log(c);
|
|
}
|
|
expect: {
|
|
var c = 0;
|
|
(function(a, b) {
|
|
(function f(o) {
|
|
var n = 2;
|
|
while (--b + (o = {
|
|
p: c++,
|
|
}) && --n > 0);
|
|
})();
|
|
})();
|
|
console.log(c);
|
|
}
|
|
expect_stdout: "2"
|
|
}
|
|
|
|
issue_3411: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
var c = 1;
|
|
!function f() {
|
|
var o = {
|
|
p: --c && f()
|
|
};
|
|
+o || console.log("PASS");
|
|
}();
|
|
}
|
|
expect: {
|
|
var c = 1;
|
|
!function f() {
|
|
var o_p = --c && f();
|
|
+{} || console.log("PASS");
|
|
}();
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
issue_3440: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
(function() {
|
|
function f() {
|
|
console.log(o.p);
|
|
}
|
|
var o = {
|
|
p: "PASS",
|
|
};
|
|
return f;
|
|
})()();
|
|
}
|
|
expect: {
|
|
(function() {
|
|
var o_p = "PASS";
|
|
return function() {
|
|
console.log(o_p);
|
|
};
|
|
})()();
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
issue_3868: {
|
|
options = {
|
|
hoist_props: true,
|
|
passes: 2,
|
|
reduce_vars: true,
|
|
side_effects: true,
|
|
}
|
|
input: {
|
|
(function(t) {
|
|
t = {};
|
|
({
|
|
get p() {},
|
|
q: (console.log("PASS"), +t),
|
|
}).r;
|
|
})();
|
|
}
|
|
expect: {
|
|
(function(t) {
|
|
t = {};
|
|
({
|
|
get p() {},
|
|
q: (console.log("PASS"), +t),
|
|
}).r;
|
|
})();
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
issue_3871: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
console.log(function() {
|
|
do {
|
|
var b = {
|
|
get null() {
|
|
c;
|
|
}
|
|
};
|
|
} while (!b);
|
|
return "PASS";
|
|
}());
|
|
}
|
|
expect: {
|
|
console.log(function() {
|
|
do {
|
|
var b = {
|
|
get null() {
|
|
c;
|
|
}
|
|
};
|
|
} while (!b);
|
|
return "PASS";
|
|
}());
|
|
}
|
|
expect_stdout: "PASS"
|
|
}
|
|
|
|
issue_3945_1: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
function f() {
|
|
o.p;
|
|
var o = {
|
|
q: 0,
|
|
};
|
|
}
|
|
}
|
|
expect: {
|
|
function f() {
|
|
o.p;
|
|
var o = {
|
|
q: 0,
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
issue_3945_2: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
console.log(typeof o);
|
|
var o = {
|
|
p: 0,
|
|
};
|
|
}
|
|
expect: {
|
|
console.log(typeof o);
|
|
var o = {
|
|
p: 0,
|
|
};
|
|
}
|
|
expect_stdout: "undefined"
|
|
}
|
|
|
|
issue_4023: {
|
|
options = {
|
|
comparisons: true,
|
|
hoist_props: true,
|
|
inline: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
typeofs: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
function f() {
|
|
var a = function() {
|
|
return { p: 0 };
|
|
}();
|
|
return console.log("undefined" != typeof a);
|
|
}
|
|
f();
|
|
}
|
|
expect: {
|
|
console.log(void 0 !== {});
|
|
}
|
|
expect_stdout: "true"
|
|
}
|
|
|
|
object_super: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
var o = {
|
|
f(a) {
|
|
return a ? console.log("PASS") : super.log("PASS");
|
|
},
|
|
};
|
|
o.f(42);
|
|
}
|
|
expect: {
|
|
var o = {
|
|
f(a) {
|
|
return a ? console.log("PASS") : super.log("PASS");
|
|
},
|
|
};
|
|
o.f(42);
|
|
}
|
|
expect_stdout: "PASS"
|
|
node_version: ">=4"
|
|
}
|
|
|
|
issue_4985: {
|
|
options = {
|
|
hoist_props: true,
|
|
reduce_vars: true,
|
|
toplevel: true,
|
|
}
|
|
input: {
|
|
var a = { p: 42 };
|
|
console.log(function() {
|
|
a;
|
|
}());
|
|
}
|
|
expect: {
|
|
var a_p = 42;
|
|
console.log(function() {
|
|
({});
|
|
}());
|
|
}
|
|
expect_stdout: "undefined"
|
|
}
|