2017-04-07 05:31:58 +00:00
|
|
|
strict: {
|
2017-04-06 03:18:59 +00:00
|
|
|
options = {
|
2017-04-07 05:31:58 +00:00
|
|
|
pure_getters: "strict",
|
2017-04-06 03:18:59 +00:00
|
|
|
reduce_vars: false,
|
|
|
|
|
side_effects: true,
|
|
|
|
|
toplevel: true,
|
|
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
c.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
undefined.prop;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
c.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-07 05:31:58 +00:00
|
|
|
strict_reduce_vars: {
|
2017-04-06 03:18:59 +00:00
|
|
|
options = {
|
2017-04-07 05:31:58 +00:00
|
|
|
pure_getters: "strict",
|
2017-04-06 03:18:59 +00:00
|
|
|
reduce_vars: true,
|
|
|
|
|
side_effects: true,
|
|
|
|
|
toplevel: true,
|
|
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
c.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
undefined.prop;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-04-07 05:31:58 +00:00
|
|
|
unsafe: {
|
2017-04-06 03:18:59 +00:00
|
|
|
options = {
|
|
|
|
|
pure_getters: true,
|
|
|
|
|
reduce_vars: false,
|
|
|
|
|
side_effects: true,
|
|
|
|
|
toplevel: true,
|
2017-04-07 05:31:58 +00:00
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
c.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
undefined.prop;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
d;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
unsafe_reduce_vars: {
|
|
|
|
|
options = {
|
|
|
|
|
pure_getters: true,
|
|
|
|
|
reduce_vars: true,
|
|
|
|
|
side_effects: true,
|
|
|
|
|
toplevel: true,
|
2017-04-06 03:18:59 +00:00
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
a.prop;
|
|
|
|
|
b.prop;
|
|
|
|
|
c.prop;
|
|
|
|
|
d.prop;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
undefined.prop;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
var a, b = null, c = {};
|
|
|
|
|
d;
|
|
|
|
|
null.prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
(void 0).prop;
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-04-07 09:06:01 +00:00
|
|
|
|
|
|
|
|
chained: {
|
|
|
|
|
options = {
|
|
|
|
|
pure_getters: "strict",
|
|
|
|
|
side_effects: true,
|
|
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
a.b.c;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
a.b.c;
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-05-13 18:10:34 +00:00
|
|
|
|
|
|
|
|
impure_getter_1: {
|
|
|
|
|
options = {
|
|
|
|
|
pure_getters: "strict",
|
|
|
|
|
side_effects: true,
|
|
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).a;
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).b;
|
|
|
|
|
}
|
|
|
|
|
expect: {
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).a;
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).b;
|
|
|
|
|
}
|
|
|
|
|
expect_stdout: "1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impure_getter_2: {
|
|
|
|
|
options = {
|
|
|
|
|
pure_getters: true,
|
|
|
|
|
side_effects: true,
|
|
|
|
|
}
|
|
|
|
|
input: {
|
|
|
|
|
// will produce incorrect output because getter is not pure
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).a;
|
|
|
|
|
({
|
|
|
|
|
get a() {
|
|
|
|
|
console.log(1);
|
|
|
|
|
},
|
|
|
|
|
b: 1
|
|
|
|
|
}).b;
|
|
|
|
|
}
|
|
|
|
|
expect: {}
|
|
|
|
|
}
|