facebookarchive/prepack
View on GitHubEliminate branches in residual functions when the comparison value never leaks
Open
#1,146 opened on Nov 10, 2017
bootcampedenhancementhelp wantedlevel 3 (medium)react compilerserializer
Description
I'll just put this on the wish list.
(function() {
const Foo = Symbol();
const Bar = Symbol();
reducer = function(action) {
switch (action) {
case Foo:
console.log('foo');
break;
case Bar:
console.log('bar');
break;
}
};
leak = Bar;
})();
should turn into:
(function () {
var Bar = Symbol();
reducer = function (action) {
switch (action) {
case Bar:
console.log('bar');
break;
}
};
leak = Bar;
})();
Foo doesn't leak anywhere. Therefore it currently gets inlined to be created in the case statement producing a new Symbol every time. However, it should just dead code eliminate the whole conditional branch since it can never happen when the only remaining callsite is a condition.