// Shard 2. // Copyright 2016 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --allow-natives-syntax --no-always-turbofan // This test file was generated by tools/gen-inlining-tests.py . // Global variables var deopt = undefined; // either true or false var counter = 0; function resetState() { counter = 0; } function warmUp(f) { try { f(); } catch (ex) { // ok } try { f(); } catch (ex) { // ok } } function resetOptAndAssertResultEquals(expected, f) { %PrepareFunctionForOptimization(f); warmUp(f); resetState(); // %DebugPrint(f); eval("'dont optimize this function itself please, but do optimize f'"); %OptimizeFunctionOnNextCall(f); assertEquals(expected, f()); } function resetOptAndAssertThrowsWith(expected, f) { %PrepareFunctionForOptimization(f); warmUp(f); resetState(); // %DebugPrint(f); eval("'dont optimize this function itself please, but do optimize f'"); %OptimizeFunctionOnNextCall(f); try { var result = f(); fail("resetOptAndAssertThrowsWith", "exception: " + expected, "result: " + result); } catch (ex) { assertEquals(expected, ex); } } function increaseAndReturn15() { if (deopt) %DeoptimizeFunction(f); counter++; return 15; } function increaseAndThrow42() { if (deopt) %DeoptimizeFunction(f); counter++; throw 42; } function increaseAndReturn15_noopt_inner() { if (deopt) %DeoptimizeFunction(f); counter++; return 15; } %NeverOptimizeFunction(increaseAndReturn15_noopt_inner); function increaseAndThrow42_noopt_inner() { if (deopt) %DeoptimizeFunction(f); counter++; throw 42; } %NeverOptimizeFunction(increaseAndThrow42_noopt_inner); // Alternative 1 function returnOrThrow(doReturn) { if (doReturn) { return increaseAndReturn15(); } else { return increaseAndThrow42(); } } // Alternative 2 function increaseAndReturn15_calls_noopt() { return increaseAndReturn15_noopt_inner(); } function increaseAndThrow42_calls_noopt() { return increaseAndThrow42_noopt_inner(); } // Alternative 3. // When passed either {increaseAndReturn15} or {increaseAndThrow42}, it acts // as the other one. function invertFunctionCall(f) { var result; try { result = f(); } catch (ex) { return ex - 27; } throw result + 27; } // Alternative 4: constructor function increaseAndStore15Constructor() { if (deopt) %DeoptimizeFunction(f); ++counter; this.x = 15; } function increaseAndThrow42Constructor() { if (deopt) %DeoptimizeFunction(f); ++counter; this.x = 42; throw this.x; } // Alternative 5: property var magic = {}; Object.defineProperty(magic, 'prop', { get: function () { if (deopt) %DeoptimizeFunction(f); return 15 + 0 * ++counter; }, set: function(x) { // argument should be 37 if (deopt) %DeoptimizeFunction(f); counter -= 36 - x; // increments counter throw 42; } }) // Generate type feedback. assertEquals(15, increaseAndReturn15_calls_noopt()); assertThrowsEquals(function() { return increaseAndThrow42_noopt_inner() }, 42); assertEquals(15, (new increaseAndStore15Constructor()).x); assertThrowsEquals(function() { return (new increaseAndThrow42Constructor()).x; }, 42); function runThisShard() { // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns, deopt] f = function f___3___r__cr______d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns, catchWithLocal] f = function f___3___r__crl______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns, catchWithLocal, deopt] f = function f___3___r__crl_____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns, catchWithLocal, endReturnLocal] f = function f___3___r__crl____l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns, catchWithLocal, endReturnLocal, deopt] f = function f___3___r__crl____ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch] f = function f___3___r_lc________ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, deopt] f = function f___3___r_lc_______d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, endReturnLocal] f = function f___3___r_lc______l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, endReturnLocal, deopt] f = function f___3___r_lc______ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchThrows] f = function f___3___r_lc__t_____ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchThrows, deopt] f = function f___3___r_lc__t____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchThrows, endReturnLocal] f = function f___3___r_lc__t___l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchThrows, endReturnLocal, deopt] f = function f___3___r_lc__t___ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal] f = function f___3___r_lc_l______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, deopt] f = function f___3___r_lc_l_____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal] f = function f___3___r_lc_l____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal, deopt] f = function f___3___r_lc_l____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, catchThrows] f = function f___3___r_lc_lt_____ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, deopt] f = function f___3___r_lc_lt____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, endReturnLocal] f = function f___3___r_lc_lt___l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, endReturnLocal, deopt] f = function f___3___r_lc_lt___ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns] f = function f___3___r_lcr_______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, deopt] f = function f___3___r_lcr______d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, endReturnLocal] f = function f___3___r_lcr_____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, endReturnLocal, deopt] f = function f___3___r_lcr_____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, catchWithLocal] f = function f___3___r_lcrl______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, deopt] f = function f___3___r_lcrl_____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, endReturnLocal] f = function f___3___r_lcrl____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryReturns, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, endReturnLocal, deopt] f = function f___3___r_lcrl____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch] f = function f___3__t___c________ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, deopt] f = function f___3__t___c_______d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchThrows] f = function f___3__t___c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchThrows, // deopt] f = function f___3__t___c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal] f = function f___3__t___c_l______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, deopt] f = function f___3__t___c_l_____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, endReturnLocal] f = function f___3__t___c_l____l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, endReturnLocal, deopt] f = function f___3__t___c_l____ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, catchThrows] f = function f___3__t___c_lt_____ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, catchThrows, deopt] f = function f___3__t___c_lt____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, catchThrows, endReturnLocal] f = function f___3__t___c_lt___l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, // catchWithLocal, catchThrows, endReturnLocal, deopt] f = function f___3__t___c_lt___ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns] f = function f___3__t___cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns, // deopt] f = function f___3__t___cr______d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns, // catchWithLocal] f = function f___3__t___crl______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns, // catchWithLocal, deopt] f = function f___3__t___crl_____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns, // catchWithLocal, endReturnLocal] f = function f___3__t___crl____l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, doCatch, catchReturns, // catchWithLocal, endReturnLocal, deopt] f = function f___3__t___crl____ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch] f = function f___3__t__lc________ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, deopt] f = function f___3__t__lc_______d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, endReturnLocal] f = function f___3__t__lc______l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(893, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, endReturnLocal, deopt] f = function f___3__t__lc______ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(893, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchThrows] f = function f___3__t__lc__t_____ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchThrows, deopt] f = function f___3__t__lc__t____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchThrows, endReturnLocal] f = function f___3__t__lc__t___l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchThrows, endReturnLocal, deopt] f = function f___3__t__lc__t___ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal] f = function f___3__t__lc_l______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, deopt] f = function f___3__t__lc_l_____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal] f = function f___3__t__lc_l____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal, deopt] f = function f___3__t__lc_l____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, catchThrows] f = function f___3__t__lc_lt_____ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, deopt] f = function f___3__t__lc_lt____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, endReturnLocal] f = function f___3__t__lc_lt___l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, catchThrows, endReturnLocal, deopt] f = function f___3__t__lc_lt___ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns] f = function f___3__t__lcr_______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, deopt] f = function f___3__t__lcr______d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, endReturnLocal] f = function f___3__t__lcr_____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, endReturnLocal, deopt] f = function f___3__t__lcr_____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, catchWithLocal] f = function f___3__t__lcrl______ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, deopt] f = function f___3__t__lcrl_____d () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, endReturnLocal] f = function f___3__t__lcrl____l_ () { var local = 888; deopt = false; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn3, tryThrows, tryResultToLocal, // doCatch, catchReturns, catchWithLocal, endReturnLocal, deopt] f = function f___3__t__lcrl____ld () { var local = 888; deopt = true; try { counter++; local += 4 + invertFunctionCall(increaseAndReturn15); counter++; } catch (ex) { counter++; return 2 + local; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(890, f); assertEquals(3, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch] f = function f__4____r__c________ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch, deopt] f = function f__4____r__c_______d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch, catchThrows] f = function f__4____r__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch, catchThrows, // deopt] f = function f__4____r__c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch, // catchReturns] f = function f__4____r__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryReturns, doCatch, // catchReturns, deopt] f = function f__4____r__cr______d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndStore15Constructor()).x; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch] f = function f__4___t___c________ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch, deopt] f = function f__4___t___c_______d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch, catchThrows] f = function f__4___t___c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch, catchThrows, // deopt] f = function f__4___t___c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch, catchReturns] f = function f__4___t___cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn4, tryThrows, doCatch, catchReturns, // deopt] f = function f__4___t___cr______d () { var local = 888; deopt = true; try { counter++; return 4 + (new increaseAndThrow42Constructor()).x; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch] f = function f_5_____r__c________ () { var local = 888; deopt = false; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch, deopt] f = function f_5_____r__c_______d () { var local = 888; deopt = true; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch, catchThrows] f = function f_5_____r__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch, catchThrows, // deopt] f = function f_5_____r__c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch, // catchReturns] f = function f_5_____r__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryReturns, doCatch, // catchReturns, deopt] f = function f_5_____r__cr______d () { var local = 888; deopt = true; try { counter++; return 4 + magic.prop /* returns 15 */; counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch] f = function f_5____t___c________ () { var local = 888; deopt = false; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch, deopt] f = function f_5____t___c_______d () { var local = 888; deopt = true; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch, catchThrows] f = function f_5____t___c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch, catchThrows, // deopt] f = function f_5____t___c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch, catchReturns] f = function f_5____t___cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn5, tryThrows, doCatch, catchReturns, // deopt] f = function f_5____t___cr______d () { var local = 888; deopt = true; try { counter++; return 4 + (magic.prop = 37 /* throws 42 */); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); } %NeverOptimizeFunction(runThisShard); // 95 tests in this shard. // 192 tests up to here. runThisShard();