// Shard 1. // 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: [tryReturns, doFinally] f = function f_______r______f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryReturns, doFinally, finallyThrows] f = function f_______r______f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryReturns, doFinally, finallyReturns] f = function f_______r______fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch] f = function f_______r__c________ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, deopt] f = function f_______r__c_______d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, doFinally] f = function f_______r__c___f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryReturns, doCatch, doFinally, finallyThrows] f = function f_______r__c___f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch, doFinally, finallyReturns] f = function f_______r__c___fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch, catchThrows] f = function f_______r__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, catchThrows, deopt] f = function f_______r__c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, catchThrows, doFinally] f = function f_______r__c__tf____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryReturns, doCatch, catchThrows, doFinally, // finallyThrows] f = function f_______r__c__tf_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch, catchThrows, doFinally, // finallyReturns] f = function f_______r__c__tfr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch, catchReturns] f = function f_______r__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, catchReturns, deopt] f = function f_______r__cr______d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryReturns, doCatch, catchReturns, doFinally] f = function f_______r__cr__f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryReturns, doCatch, catchReturns, doFinally, // finallyThrows] f = function f_______r__cr__f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryReturns, doCatch, catchReturns, doFinally, // finallyReturns] f = function f_______r__cr__fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, doFinally] f = function f______t_______f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertThrowsWith(42, f); assertEquals(4, counter); // Variant flags: [tryThrows, doFinally, finallyThrows] f = function f______t_______f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, doFinally, finallyReturns] f = function f______t_______fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, doCatch] f = function f______t___c________ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, deopt] f = function f______t___c_______d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, doFinally] f = function f______t___c___f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(7, counter); // Variant flags: [tryThrows, doCatch, doFinally, finallyThrows] f = function f______t___c___f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, doFinally, finallyReturns] f = function f______t___c___fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, catchThrows] f = function f______t___c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, doCatch, catchThrows, deopt] f = function f______t___c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, doCatch, catchThrows, doFinally] f = function f______t___c__tf____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, catchThrows, doFinally, // finallyThrows] f = function f______t___c__tf_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(4, counter); // Variant flags: [tryThrows, doCatch, catchThrows, doFinally, // finallyReturns] f = function f______t___c__tfr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(4, counter); // Variant flags: [tryThrows, doCatch, catchReturns] f = function f______t___cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, doCatch, catchReturns, deopt] f = function f______t___cr______d () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, doCatch, catchReturns, doFinally] f = function f______t___cr__f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(5, counter); // Variant flags: [tryThrows, doCatch, catchReturns, doFinally, // finallyThrows] f = function f______t___cr__f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(4, counter); // Variant flags: [tryThrows, doCatch, catchReturns, doFinally, // finallyReturns] f = function f______t___cr__fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, doFinally] f = function f______tr______f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertThrowsWith(42, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, doFinally, finallyThrows] f = function f______tr______f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, doFinally, finallyReturns] f = function f______tr______fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, doCatch] f = function f______tr__c________ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [tryThrows, tryReturns, doCatch, doFinally] f = function f______tr__c___f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(7, counter); // Variant flags: [tryThrows, tryReturns, doCatch, doFinally, // finallyThrows] f = function f______tr__c___f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(5, counter); // Variant flags: [tryThrows, tryReturns, doCatch, doFinally, // finallyReturns] f = function f______tr__c___fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(5, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchThrows] f = function f______tr__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchThrows, // doFinally] f = function f______tr__c__tf____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(5, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchThrows, // doFinally, finallyThrows] f = function f______tr__c__tf_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchThrows, // doFinally, finallyReturns] f = function f______tr__c__tfr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchReturns] f = function f______tr__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchReturns, // doFinally] f = function f______tr__cr__f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(5, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchReturns, // doFinally, finallyThrows] f = function f______tr__cr__f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, doCatch, catchReturns, // doFinally, finallyReturns] f = function f______tr__cr__fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndThrow42(); return 4 + increaseAndReturn15(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, // doFinally] f = function f______trf_____f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, // doFinally, finallyThrows] f = function f______trf_____f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, // doFinally, finallyReturns] f = function f______trf_____fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch] f = function f______trf_c________ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // doFinally] f = function f______trf_c___f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // doFinally, finallyThrows] f = function f______trf_c___f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // doFinally, finallyReturns] f = function f______trf_c___fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchThrows] f = function f______trf_c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchThrows, doFinally] f = function f______trf_c__tf____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchThrows, doFinally, finallyThrows] f = function f______trf_c__tf_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchThrows, doFinally, finallyReturns] f = function f______trf_c__tfr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchReturns] f = function f______trf_cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchReturns, doFinally] f = function f______trf_cr__f____ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; local += 2; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(4, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchReturns, doFinally, finallyThrows] f = function f______trf_cr__f_t__ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; throw 25; counter++; } counter++; } resetOptAndAssertThrowsWith(25, f); assertEquals(3, counter); // Variant flags: [tryThrows, tryReturns, tryFirstReturns, doCatch, // catchReturns, doFinally, finallyReturns] f = function f______trf_cr__fr___ () { var local = 888; deopt = false; try { counter++; return 4 + increaseAndReturn15(); return 4 + increaseAndThrow42(); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } finally { counter++; return 3 + local; counter++; } counter++; } resetOptAndAssertResultEquals(891, f); assertEquals(3, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch] f = function f_____1_r__c________ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch, deopt] f = function f_____1_r__c_______d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows] f = function f_____1_r__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows, // deopt] f = function f_____1_r__c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch, // catchReturns] f = function f_____1_r__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryReturns, doCatch, // catchReturns, deopt] f = function f_____1_r__cr______d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(true); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch] f = function f_____1t___c________ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch, deopt] f = function f_____1t___c_______d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(undefined, f); assertEquals(5, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows] f = function f_____1t___c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows, // deopt] f = function f_____1t___c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertThrowsWith(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns] f = function f_____1t___cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns, // deopt] f = function f_____1t___cr______d () { var local = 888; deopt = true; try { counter++; return 4 + returnOrThrow(false); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(44, f); assertEquals(3, counter); // Variant flags: [alternativeFn2, tryReturns, doCatch, // catchWithLocal, endReturnLocal, deopt] f = function f____2__r__c_l____ld () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndReturn15_calls_noopt(); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal, // doCatch, endReturnLocal, deopt] f = function f____2__r_lc______ld () { var local = 888; deopt = true; try { counter++; local += 4 + increaseAndReturn15_calls_noopt(); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal, deopt] f = function f____2__r_lc_l____ld () { var local = 888; deopt = true; try { counter++; local += 4 + increaseAndReturn15_calls_noopt(); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(912, f); assertEquals(4, counter); // Variant flags: [alternativeFn2, tryThrows, doCatch, // catchWithLocal, endReturnLocal, deopt] f = function f____2_t___c_l____ld () { var local = 888; deopt = true; try { counter++; return 4 + increaseAndThrow42_calls_noopt(); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal, // doCatch, endReturnLocal, deopt] f = function f____2_t__lc______ld () { var local = 888; deopt = true; try { counter++; local += 4 + increaseAndThrow42_calls_noopt(); counter++; } catch (ex) { counter++; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(893, f); assertEquals(5, counter); // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal, // doCatch, catchWithLocal, endReturnLocal, deopt] f = function f____2_t__lc_l____ld () { var local = 888; deopt = true; try { counter++; local += 4 + increaseAndThrow42_calls_noopt(); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(935, f); assertEquals(5, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch] f = function f___3___r__c________ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, deopt] f = function f___3___r__c_______d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, catchThrows] f = function f___3___r__c__t_____ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, catchThrows, // deopt] f = function f___3___r__c__t____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal] f = function f___3___r__c_l______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, deopt] f = function f___3___r__c_l_____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, endReturnLocal] f = function f___3___r__c_l____l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, endReturnLocal, deopt] f = function f___3___r__c_l____ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; local += ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, catchThrows] f = function f___3___r__c_lt_____ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, catchThrows, deopt] f = function f___3___r__c_lt____d () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, catchThrows, endReturnLocal] f = function f___3___r__c_lt___l_ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchWithLocal, catchThrows, endReturnLocal, deopt] f = function f___3___r__c_lt___ld () { var local = 888; deopt = true; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; throw 2 + ex; counter++; } counter++; return 5 + local; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); // Variant flags: [alternativeFn3, tryReturns, doCatch, // catchReturns] f = function f___3___r__cr_______ () { var local = 888; deopt = false; try { counter++; return 4 + invertFunctionCall(increaseAndThrow42); counter++; } catch (ex) { counter++; return 2 + ex; counter++; } counter++; } resetOptAndAssertResultEquals(19, f); assertEquals(2, counter); } %NeverOptimizeFunction(runThisShard); // 97 tests in this shard. // 97 tests up to here. runThisShard();