Prepack: Converts 1 meaningless line to 1065 lines of code

Created on 4 May 2017  路  7Comments  路  Source: facebook/prepack

Tried running this modified example from the docs

(function() {
  function fib(x) {
    let y = Date.now(); // the useless line that I added
    return x <= 1 ? x : fib(x - 1) + fib(x - 2);
  }

  let x = Date.now();
  if (x * 2 > 42) x = fib(10);
  global.result = x;
})();


and the output looks like

(function () {
  var _$0 = Date.now();

  if (typeof _$0 !== "number") {
    throw new Error("Prepack model invariant violation: " + _$0);
  }

  var _0 = _$0 * 2 > 42;

  if (_0) {
    var _$1 = Date.now();

    if (typeof _$1 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1);
    }

    var _$2 = Date.now();

    if (typeof _$2 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2);
    }

    var _$3 = Date.now();

    if (typeof _$3 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$3);
    }

    var _$4 = Date.now();

    if (typeof _$4 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$4);
    }

    var _$5 = Date.now();

    if (typeof _$5 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$5);
    }

    var _$6 = Date.now();

    if (typeof _$6 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$6);
    }

    var _$7 = Date.now();

    if (typeof _$7 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$7);
    }

    var _$8 = Date.now();

    if (typeof _$8 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$8);
    }

    var _$9 = Date.now();

    if (typeof _$9 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$9);
    }

    var _$a = Date.now();

    if (typeof _$a !== "number") {
      throw new Error("Prepack model invariant violation: " + _$a);
    }

    var _$b = Date.now();

    if (typeof _$b !== "number") {
      throw new Error("Prepack model invariant violation: " + _$b);
    }

    var _$c = Date.now();

    if (typeof _$c !== "number") {
      throw new Error("Prepack model invariant violation: " + _$c);
    }

    var _$d = Date.now();

    if (typeof _$d !== "number") {
      throw new Error("Prepack model invariant violation: " + _$d);
    }

    var _$e = Date.now();

    if (typeof _$e !== "number") {
      throw new Error("Prepack model invariant violation: " + _$e);
    }

    var _$f = Date.now();

    if (typeof _$f !== "number") {
      throw new Error("Prepack model invariant violation: " + _$f);
    }

    var _$g = Date.now();

    if (typeof _$g !== "number") {
      throw new Error("Prepack model invariant violation: " + _$g);
    }

    var _$h = Date.now();

    if (typeof _$h !== "number") {
      throw new Error("Prepack model invariant violation: " + _$h);
    }

    var _$i = Date.now();

    if (typeof _$i !== "number") {
      throw new Error("Prepack model invariant violation: " + _$i);
    }

    var _$j = Date.now();

    if (typeof _$j !== "number") {
      throw new Error("Prepack model invariant violation: " + _$j);
    }

    var _$k = Date.now();

    if (typeof _$k !== "number") {
      throw new Error("Prepack model invariant violation: " + _$k);
    }

    var _$l = Date.now();

    if (typeof _$l !== "number") {
      throw new Error("Prepack model invariant violation: " + _$l);
    }

    var _$m = Date.now();

    if (typeof _$m !== "number") {
      throw new Error("Prepack model invariant violation: " + _$m);
    }

    var _$n = Date.now();

    if (typeof _$n !== "number") {
      throw new Error("Prepack model invariant violation: " + _$n);
    }

    var _$o = Date.now();

    if (typeof _$o !== "number") {
      throw new Error("Prepack model invariant violation: " + _$o);
    }

    var _$p = Date.now();

    if (typeof _$p !== "number") {
      throw new Error("Prepack model invariant violation: " + _$p);
    }

    var _$q = Date.now();

    if (typeof _$q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$q);
    }

    var _$r = Date.now();

    if (typeof _$r !== "number") {
      throw new Error("Prepack model invariant violation: " + _$r);
    }

    var _$s = Date.now();

    if (typeof _$s !== "number") {
      throw new Error("Prepack model invariant violation: " + _$s);
    }

    var _$t = Date.now();

    if (typeof _$t !== "number") {
      throw new Error("Prepack model invariant violation: " + _$t);
    }

    var _$u = Date.now();

    if (typeof _$u !== "number") {
      throw new Error("Prepack model invariant violation: " + _$u);
    }

    var _$v = Date.now();

    if (typeof _$v !== "number") {
      throw new Error("Prepack model invariant violation: " + _$v);
    }

    var _$w = Date.now();

    if (typeof _$w !== "number") {
      throw new Error("Prepack model invariant violation: " + _$w);
    }

    var _$x = Date.now();

    if (typeof _$x !== "number") {
      throw new Error("Prepack model invariant violation: " + _$x);
    }

    var _$y = Date.now();

    if (typeof _$y !== "number") {
      throw new Error("Prepack model invariant violation: " + _$y);
    }

    var _$z = Date.now();

    if (typeof _$z !== "number") {
      throw new Error("Prepack model invariant violation: " + _$z);
    }

    var _$A = Date.now();

    if (typeof _$A !== "number") {
      throw new Error("Prepack model invariant violation: " + _$A);
    }

    var _$B = Date.now();

    if (typeof _$B !== "number") {
      throw new Error("Prepack model invariant violation: " + _$B);
    }

    var _$C = Date.now();

    if (typeof _$C !== "number") {
      throw new Error("Prepack model invariant violation: " + _$C);
    }

    var _$D = Date.now();

    if (typeof _$D !== "number") {
      throw new Error("Prepack model invariant violation: " + _$D);
    }

    var _$E = Date.now();

    if (typeof _$E !== "number") {
      throw new Error("Prepack model invariant violation: " + _$E);
    }

    var _$F = Date.now();

    if (typeof _$F !== "number") {
      throw new Error("Prepack model invariant violation: " + _$F);
    }

    var _$G = Date.now();

    if (typeof _$G !== "number") {
      throw new Error("Prepack model invariant violation: " + _$G);
    }

    var _$H = Date.now();

    if (typeof _$H !== "number") {
      throw new Error("Prepack model invariant violation: " + _$H);
    }

    var _$I = Date.now();

    if (typeof _$I !== "number") {
      throw new Error("Prepack model invariant violation: " + _$I);
    }

    var _$J = Date.now();

    if (typeof _$J !== "number") {
      throw new Error("Prepack model invariant violation: " + _$J);
    }

    var _$K = Date.now();

    if (typeof _$K !== "number") {
      throw new Error("Prepack model invariant violation: " + _$K);
    }

    var _$L = Date.now();

    if (typeof _$L !== "number") {
      throw new Error("Prepack model invariant violation: " + _$L);
    }

    var _$M = Date.now();

    if (typeof _$M !== "number") {
      throw new Error("Prepack model invariant violation: " + _$M);
    }

    var _$N = Date.now();

    if (typeof _$N !== "number") {
      throw new Error("Prepack model invariant violation: " + _$N);
    }

    var _$O = Date.now();

    if (typeof _$O !== "number") {
      throw new Error("Prepack model invariant violation: " + _$O);
    }

    var _$P = Date.now();

    if (typeof _$P !== "number") {
      throw new Error("Prepack model invariant violation: " + _$P);
    }

    var _$Q = Date.now();

    if (typeof _$Q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$Q);
    }

    var _$R = Date.now();

    if (typeof _$R !== "number") {
      throw new Error("Prepack model invariant violation: " + _$R);
    }

    var _$S = Date.now();

    if (typeof _$S !== "number") {
      throw new Error("Prepack model invariant violation: " + _$S);
    }

    var _$T = Date.now();

    if (typeof _$T !== "number") {
      throw new Error("Prepack model invariant violation: " + _$T);
    }

    var _$U = Date.now();

    if (typeof _$U !== "number") {
      throw new Error("Prepack model invariant violation: " + _$U);
    }

    var _$V = Date.now();

    if (typeof _$V !== "number") {
      throw new Error("Prepack model invariant violation: " + _$V);
    }

    var _$W = Date.now();

    if (typeof _$W !== "number") {
      throw new Error("Prepack model invariant violation: " + _$W);
    }

    var _$X = Date.now();

    if (typeof _$X !== "number") {
      throw new Error("Prepack model invariant violation: " + _$X);
    }

    var _$Y = Date.now();

    if (typeof _$Y !== "number") {
      throw new Error("Prepack model invariant violation: " + _$Y);
    }

    var _$Z = Date.now();

    if (typeof _$Z !== "number") {
      throw new Error("Prepack model invariant violation: " + _$Z);
    }

    var _$10 = Date.now();

    if (typeof _$10 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$10);
    }

    var _$11 = Date.now();

    if (typeof _$11 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$11);
    }

    var _$12 = Date.now();

    if (typeof _$12 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$12);
    }

    var _$13 = Date.now();

    if (typeof _$13 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$13);
    }

    var _$14 = Date.now();

    if (typeof _$14 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$14);
    }

    var _$15 = Date.now();

    if (typeof _$15 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$15);
    }

    var _$16 = Date.now();

    if (typeof _$16 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$16);
    }

    var _$17 = Date.now();

    if (typeof _$17 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$17);
    }

    var _$18 = Date.now();

    if (typeof _$18 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$18);
    }

    var _$19 = Date.now();

    if (typeof _$19 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$19);
    }

    var _$1a = Date.now();

    if (typeof _$1a !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1a);
    }

    var _$1b = Date.now();

    if (typeof _$1b !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1b);
    }

    var _$1c = Date.now();

    if (typeof _$1c !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1c);
    }

    var _$1d = Date.now();

    if (typeof _$1d !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1d);
    }

    var _$1e = Date.now();

    if (typeof _$1e !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1e);
    }

    var _$1f = Date.now();

    if (typeof _$1f !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1f);
    }

    var _$1g = Date.now();

    if (typeof _$1g !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1g);
    }

    var _$1h = Date.now();

    if (typeof _$1h !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1h);
    }

    var _$1i = Date.now();

    if (typeof _$1i !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1i);
    }

    var _$1j = Date.now();

    if (typeof _$1j !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1j);
    }

    var _$1k = Date.now();

    if (typeof _$1k !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1k);
    }

    var _$1l = Date.now();

    if (typeof _$1l !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1l);
    }

    var _$1m = Date.now();

    if (typeof _$1m !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1m);
    }

    var _$1n = Date.now();

    if (typeof _$1n !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1n);
    }

    var _$1o = Date.now();

    if (typeof _$1o !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1o);
    }

    var _$1p = Date.now();

    if (typeof _$1p !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1p);
    }

    var _$1q = Date.now();

    if (typeof _$1q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1q);
    }

    var _$1r = Date.now();

    if (typeof _$1r !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1r);
    }

    var _$1s = Date.now();

    if (typeof _$1s !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1s);
    }

    var _$1t = Date.now();

    if (typeof _$1t !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1t);
    }

    var _$1u = Date.now();

    if (typeof _$1u !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1u);
    }

    var _$1v = Date.now();

    if (typeof _$1v !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1v);
    }

    var _$1w = Date.now();

    if (typeof _$1w !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1w);
    }

    var _$1x = Date.now();

    if (typeof _$1x !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1x);
    }

    var _$1y = Date.now();

    if (typeof _$1y !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1y);
    }

    var _$1z = Date.now();

    if (typeof _$1z !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1z);
    }

    var _$1A = Date.now();

    if (typeof _$1A !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1A);
    }

    var _$1B = Date.now();

    if (typeof _$1B !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1B);
    }

    var _$1C = Date.now();

    if (typeof _$1C !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1C);
    }

    var _$1D = Date.now();

    if (typeof _$1D !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1D);
    }

    var _$1E = Date.now();

    if (typeof _$1E !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1E);
    }

    var _$1F = Date.now();

    if (typeof _$1F !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1F);
    }

    var _$1G = Date.now();

    if (typeof _$1G !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1G);
    }

    var _$1H = Date.now();

    if (typeof _$1H !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1H);
    }

    var _$1I = Date.now();

    if (typeof _$1I !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1I);
    }

    var _$1J = Date.now();

    if (typeof _$1J !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1J);
    }

    var _$1K = Date.now();

    if (typeof _$1K !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1K);
    }

    var _$1L = Date.now();

    if (typeof _$1L !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1L);
    }

    var _$1M = Date.now();

    if (typeof _$1M !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1M);
    }

    var _$1N = Date.now();

    if (typeof _$1N !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1N);
    }

    var _$1O = Date.now();

    if (typeof _$1O !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1O);
    }

    var _$1P = Date.now();

    if (typeof _$1P !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1P);
    }

    var _$1Q = Date.now();

    if (typeof _$1Q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1Q);
    }

    var _$1R = Date.now();

    if (typeof _$1R !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1R);
    }

    var _$1S = Date.now();

    if (typeof _$1S !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1S);
    }

    var _$1T = Date.now();

    if (typeof _$1T !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1T);
    }

    var _$1U = Date.now();

    if (typeof _$1U !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1U);
    }

    var _$1V = Date.now();

    if (typeof _$1V !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1V);
    }

    var _$1W = Date.now();

    if (typeof _$1W !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1W);
    }

    var _$1X = Date.now();

    if (typeof _$1X !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1X);
    }

    var _$1Y = Date.now();

    if (typeof _$1Y !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1Y);
    }

    var _$1Z = Date.now();

    if (typeof _$1Z !== "number") {
      throw new Error("Prepack model invariant violation: " + _$1Z);
    }

    var _$20 = Date.now();

    if (typeof _$20 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$20);
    }

    var _$21 = Date.now();

    if (typeof _$21 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$21);
    }

    var _$22 = Date.now();

    if (typeof _$22 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$22);
    }

    var _$23 = Date.now();

    if (typeof _$23 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$23);
    }

    var _$24 = Date.now();

    if (typeof _$24 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$24);
    }

    var _$25 = Date.now();

    if (typeof _$25 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$25);
    }

    var _$26 = Date.now();

    if (typeof _$26 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$26);
    }

    var _$27 = Date.now();

    if (typeof _$27 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$27);
    }

    var _$28 = Date.now();

    if (typeof _$28 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$28);
    }

    var _$29 = Date.now();

    if (typeof _$29 !== "number") {
      throw new Error("Prepack model invariant violation: " + _$29);
    }

    var _$2a = Date.now();

    if (typeof _$2a !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2a);
    }

    var _$2b = Date.now();

    if (typeof _$2b !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2b);
    }

    var _$2c = Date.now();

    if (typeof _$2c !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2c);
    }

    var _$2d = Date.now();

    if (typeof _$2d !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2d);
    }

    var _$2e = Date.now();

    if (typeof _$2e !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2e);
    }

    var _$2f = Date.now();

    if (typeof _$2f !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2f);
    }

    var _$2g = Date.now();

    if (typeof _$2g !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2g);
    }

    var _$2h = Date.now();

    if (typeof _$2h !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2h);
    }

    var _$2i = Date.now();

    if (typeof _$2i !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2i);
    }

    var _$2j = Date.now();

    if (typeof _$2j !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2j);
    }

    var _$2k = Date.now();

    if (typeof _$2k !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2k);
    }

    var _$2l = Date.now();

    if (typeof _$2l !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2l);
    }

    var _$2m = Date.now();

    if (typeof _$2m !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2m);
    }

    var _$2n = Date.now();

    if (typeof _$2n !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2n);
    }

    var _$2o = Date.now();

    if (typeof _$2o !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2o);
    }

    var _$2p = Date.now();

    if (typeof _$2p !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2p);
    }

    var _$2q = Date.now();

    if (typeof _$2q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2q);
    }

    var _$2r = Date.now();

    if (typeof _$2r !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2r);
    }

    var _$2s = Date.now();

    if (typeof _$2s !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2s);
    }

    var _$2t = Date.now();

    if (typeof _$2t !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2t);
    }

    var _$2u = Date.now();

    if (typeof _$2u !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2u);
    }

    var _$2v = Date.now();

    if (typeof _$2v !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2v);
    }

    var _$2w = Date.now();

    if (typeof _$2w !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2w);
    }

    var _$2x = Date.now();

    if (typeof _$2x !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2x);
    }

    var _$2y = Date.now();

    if (typeof _$2y !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2y);
    }

    var _$2z = Date.now();

    if (typeof _$2z !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2z);
    }

    var _$2A = Date.now();

    if (typeof _$2A !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2A);
    }

    var _$2B = Date.now();

    if (typeof _$2B !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2B);
    }

    var _$2C = Date.now();

    if (typeof _$2C !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2C);
    }

    var _$2D = Date.now();

    if (typeof _$2D !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2D);
    }

    var _$2E = Date.now();

    if (typeof _$2E !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2E);
    }

    var _$2F = Date.now();

    if (typeof _$2F !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2F);
    }

    var _$2G = Date.now();

    if (typeof _$2G !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2G);
    }

    var _$2H = Date.now();

    if (typeof _$2H !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2H);
    }

    var _$2I = Date.now();

    if (typeof _$2I !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2I);
    }

    var _$2J = Date.now();

    if (typeof _$2J !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2J);
    }

    var _$2K = Date.now();

    if (typeof _$2K !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2K);
    }

    var _$2L = Date.now();

    if (typeof _$2L !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2L);
    }

    var _$2M = Date.now();

    if (typeof _$2M !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2M);
    }

    var _$2N = Date.now();

    if (typeof _$2N !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2N);
    }

    var _$2O = Date.now();

    if (typeof _$2O !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2O);
    }

    var _$2P = Date.now();

    if (typeof _$2P !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2P);
    }

    var _$2Q = Date.now();

    if (typeof _$2Q !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2Q);
    }

    var _$2R = Date.now();

    if (typeof _$2R !== "number") {
      throw new Error("Prepack model invariant violation: " + _$2R);
    }
  }

  result = _0 ? 55 : _$0;
})();

bug serializer design needed

Most helpful comment

The latest Prepack in master has the fix from the merged pull request. But there hasn't been a new npm release yet, and that's when we'd update the website as well.

All 7 comments

Replacing with y = Math.random() has the same effect. Something wonky with the Symbolic Execution trying to predict the abstract values :). There seems to be a cut-off on the branching so it doesn't wander long.

This should be addressed at some point. We should add some detection to make sure unobservable intermediate values of globals aren't serialized out (provided we can guarantee that the intermediate statements have no other side effects).

Implementation details of issue:
Whenever we hit a Date.now() or Math.random() call or other environment interaction, we add something to the "generator" which conceptually serializes it immediately at that program state.

@cblappert this doesn't seem to be fixed yet

image

The latest Prepack in master has the fix from the merged pull request. But there hasn't been a new npm release yet, and that's when we'd update the website as well.

I take it the site still hasn't been updated yet? Using the original example, I'm seeing this:


Click to show

(function () {
  var _$2S = this;

  var _$0 = _$2S.Date.now();

  var _1 = _$0 * 2;

  var _0 = _1 > 42;

  {
    if (_0) {
      {
        {
          {
            {
              {
                {
                  {
                    {
                      {
                        {}
                        {}
                      }
                      {}
                    }
                    {
                      {}
                      {}
                    }
                  }
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                }
                {
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                  {
                    {}
                    {}
                  }
                }
              }
              {
                {
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                  {
                    {}
                    {}
                  }
                }
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
              }
            }
            {
              {
                {
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                  {
                    {}
                    {}
                  }
                }
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
              }
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
            }
          }
          {
            {
              {
                {
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                  {
                    {}
                    {}
                  }
                }
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
              }
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
            }
            {
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
              {
                {
                  {}
                  {}
                }
                {}
              }
            }
          }
        }
        {
          {
            {
              {
                {
                  {
                    {
                      {}
                      {}
                    }
                    {}
                  }
                  {
                    {}
                    {}
                  }
                }
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
              }
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
            }
            {
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
              {
                {
                  {}
                  {}
                }
                {}
              }
            }
          }
          {
            {
              {
                {
                  {
                    {}
                    {}
                  }
                  {}
                }
                {
                  {}
                  {}
                }
              }
              {
                {
                  {}
                  {}
                }
                {}
              }
            }
            {
              {
                {
                  {}
                  {}
                }
                {}
              }
              {
                {}
                {}
              }
            }
          }
        }
      }
    }
  }

  var _5 = _0 ? 55 : _$0;

  result = _5;
}).call(this);

(It might be a separate bug, however - the "useless" line isn't even present, and invariants aren't even being checked.)

This looks like a new issue. The basic problem is that empty generators are not being removed aggressively enough. The likely site where a fix should go seems to be here: https://github.com/facebook/prepack/blob/b854812433c35590901045f8b15997025b1e3c7d/src/utils/generator.js#L418

There should be an additional special case for blocks of length 0.

@hermanventer Filed #1333. (I found other issues, too.)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

simon-yxl picture simon-yxl  路  3Comments

vojtechkral picture vojtechkral  路  5Comments

phpnode picture phpnode  路  3Comments

cblappert picture cblappert  路  7Comments

matheusml picture matheusml  路  8Comments