diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/inline-exception-1.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/inline-exception-1.js | 2219 |
1 files changed, 2219 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/inline-exception-1.js b/deps/v8/test/mjsunit/compiler/inline-exception-1.js new file mode 100644 index 0000000000..ac259afad7 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/inline-exception-1.js @@ -0,0 +1,2219 @@ +// 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 --turbo --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) { + 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) { + 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(); |