| // 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-opt | |
| // 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(); |