facebookarchive/prepack

Eliminate branches in residual functions when the comparison value never leaks

Open

#1146 aperta il 10 nov 2017

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)JavaScript (520 fork)batch import
bootcampedenhancementhelp wantedlevel 3 (medium)react compilerserializer

Metriche repository

Star
 (14.268 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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.

Guida contributor