Skip to content
This repository has been archived by the owner on Feb 12, 2022. It is now read-only.

Converts 1 meaningless line to 1065 lines of code #543

Closed
kamranahmedse opened this issue May 4, 2017 · 7 comments
Closed

Converts 1 meaningless line to 1065 lines of code #543

kamranahmedse opened this issue May 4, 2017 · 7 comments

Comments

@kamranahmedse
Copy link

kamranahmedse commented May 4, 2017

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;
})();
@SukantGujar
Copy link

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.

@cblappert
Copy link
Contributor

cblappert commented May 4, 2017

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 cblappert self-assigned this Jul 14, 2017
facebook-github-bot pushed a commit that referenced this issue Aug 3, 2017
Summary:
`Date.now()` and `Math.random()` calls emitted into the generator now no longer get serialized if their results are not used. In principle this is safe for any pure definitions of AbstractValues emitted to the generator but that is too hard to determine for most cases.

Adds a test case verifying that extra `Date.now()` calls are eliminated.

See #543 for more detail.
Closes #822

Differential Revision: D5537430

Pulled By: cblappert

fbshipit-source-id: 4f3e12eee65fdbea7504d73399eddde5a1e93703
@kamranahmedse
Copy link
Author

kamranahmedse commented Aug 4, 2017

@cblappert this doesn't seem to be fixed yet

image

@NTillmann
Copy link
Contributor

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.

@dead-claudia
Copy link

dead-claudia commented Jan 18, 2018

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.)

@hermanventer
Copy link
Contributor

hermanventer commented Jan 18, 2018

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.

@dead-claudia
Copy link

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

6 participants