enhance inline (#3832)

This commit is contained in:
Alex Lam S.L
2020-04-30 21:33:46 +01:00
committed by GitHub
parent d900006973
commit f80d5b8c9e
3 changed files with 582 additions and 21 deletions

View File

@@ -2877,7 +2877,7 @@ issue_2437: {
}
}
issue_2485: {
issue_2485_1: {
options = {
functions: true,
reduce_funcs: true,
@@ -2926,6 +2926,54 @@ issue_2485: {
expect_stdout: "6"
}
issue_2485_2: {
options = {
functions: true,
inline: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var foo = function(bar) {
var n = function(a, b) {
return a + b;
};
var sumAll = function(arg) {
return arg.reduce(n, 0);
};
var runSumAll = function(arg) {
return sumAll(arg);
};
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect: {
var foo = function(bar) {
function n(a, b) {
return a + b;
}
function runSumAll(arg) {
return arg.reduce(n, 0);
}
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect_stdout: "6"
}
issue_3364: {
options = {
functions: true,
@@ -3113,9 +3161,7 @@ issue_3400_1: {
return console.log(o[g]), o;
}
function e() {
return [ 42 ].map(function(v) {
return h(v);
});
return [ 42 ].map(h);
}
return e();
}()[0].p);
@@ -3130,7 +3176,7 @@ issue_3400_2: {
options = {
collapse_vars: true,
inline: true,
passes: 2,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
unused: true,
@@ -3158,11 +3204,11 @@ issue_3400_2: {
}
expect: {
void console.log(function g() {
return [ 42 ].map(function(v) {
return o = {
p: v
}, console.log(o[g]), o;
var o;
return [ 42 ].map(function(u) {
var o = {
p: u
};
return console.log(o[g]), o;
});
}()[0].p);
}
@@ -3568,8 +3614,8 @@ pr_3592_2: {
var g = [ "PASS" ];
console.log((z = "PASS", function(problem) {
return g[problem];
}((y = z, problem(y)))));
var z, y;
}(problem(z))));
var z;
}
expect_stdout: "PASS"
}
@@ -3635,9 +3681,7 @@ pr_3595_1: {
}
console.log((arg = "PASS", function(problem) {
return g[problem];
}(function(arg) {
return problem(arg);
}(arg))));
}(problem(arg))));
var arg;
}
expect_stdout: "PASS"
@@ -3678,9 +3722,7 @@ pr_3595_2: {
}
console.log(function(problem) {
return g[problem];
}(function(arg) {
return problem(arg);
}("PASS")));
}(problem("PASS")));
}
expect_stdout: "PASS"
}
@@ -4108,3 +4150,443 @@ issue_3821_2: {
}
expect_stdout: "PASS"
}
substitude: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect_stdout: [
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
]
}
substitude_arguments: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f() {
return arguments[0] === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect: {
var o = {};
function f() {
return arguments[0] === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect_stdout: [
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
]
}
substitude_drop_fargs: {
options = {
inline: true,
keep_fargs: false,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return f;
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect_stdout: [
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
]
}
substitude_this: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? this === o : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect: {
var o = {};
function f(a) {
return a === o ? this === o : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect_stdout: [
"false",
"true",
"false",
"false",
"false",
"false",
"false",
"false",
"false",
"false",
]
}
substitude_use_strict: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
"use strict";
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect: {
var o = {};
function f(a) {
"use strict";
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o));
console.log(g().call(o, o));
});
}
expect_stdout: [
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
"PASS",
]
}

View File

@@ -4589,7 +4589,7 @@ perf_8: {
expect_stdout: "348150"
}
issue_2485: {
issue_2485_1: {
options = {
reduce_funcs: true,
reduce_vars: true,
@@ -4637,6 +4637,53 @@ issue_2485: {
expect_stdout: "6"
}
issue_2485_2: {
options = {
inline: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var foo = function(bar) {
var n = function(a, b) {
return a + b;
};
var sumAll = function(arg) {
return arg.reduce(n, 0);
};
var runSumAll = function(arg) {
return sumAll(arg);
};
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect: {
var foo = function(bar) {
var n = function(a, b) {
return a + b;
};
var runSumAll = function(arg) {
return arg.reduce(n, 0);
};
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect_stdout: "6"
}
issue_2455: {
options = {
reduce_vars: true,