//@ defaultNoSamplingProfilerRun function shouldThrow(func, errorMessage) { var errorThrown = false; var error = null; try { func(); } catch (e) { errorThrown = true; error = e; } if (!errorThrown) throw new Error('not thrown'); if (String(error) !== errorMessage) throw new Error(`bad error: ${String(error)}`); } function sloppyCountdown(n) { function even(n) { if (n == 0) return n; return odd(n - 1); } function odd(n) { if (n == 1) return n; return even(n - 1); } if (n % 2 === 0) return even(n); else return odd(n); } function strictCountdown(n) { "use strict"; function even(n) { if (n == 0) return n; return odd(n - 1); } function odd(n) { if (n == 1) return n; return even(n - 1); } if (n % 2 === 0) return even(n); else return odd(n); } shouldThrow(function () { sloppyCountdown(100000); }, "RangeError: Maximum call stack size exceeded."); strictCountdown(100000); // Parity alterning function odd(n) { "use strict"; if (n > 0) return even(n, 0); } function even(n) { "use strict"; return odd(n - 1); } odd(100000);