31a3cfbc10
BUG=v8:8801 Change-Id: I9d9d9824c6c9ad0176bbfd3723da1b578b17c256 Reviewed-on: https://chromium-review.googlesource.com/c/1495555 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Mythri Alle <mythria@chromium.org> Cr-Commit-Position: refs/heads/master@{#60001}
2222 lines
46 KiB
JavaScript
2222 lines
46 KiB
JavaScript
// 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();
|