node/deps/v8/test/mjsunit/compiler/try-finally-deopt.js
Ali Ijaz Sheikh 52af5c4eeb deps: upgrade V8 to 5.0.71.32
* Pick up the branch head for V8 5.0 stable [1]
* Edit v8 gitignore to allow trace_event copy
* Update V8 DEP trace_event as per deps/v8/DEPS [2]

[1] https://chromium.googlesource.com/v8/v8.git/+/3c67831
[2] 4b09207e44

Ref: https://github.com/nodejs/node/pull/5945
PR-URL: https://github.com/nodejs/node/pull/6111
Reviewed-By: targos - Michaël Zasso <mic.besace@gmail.com>
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: indutny - Fedor Indutny <fedor.indutny@gmail.com>
2016-04-14 10:03:39 -07:00

250 lines
4.2 KiB
JavaScript

// 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
(function DeoptimizeFinallyFallThrough() {
var global = 0;
function f() {
var a = 1;
try {
global = 1;
} finally {
global = 42;
%DeoptimizeNow();
}
return global + a;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(43, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyReturn() {
var global = 0;
function f() {
try {
return 10;
} finally {
global = 42;
%DeoptimizeNow();
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(10, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyReturnDoublyNested() {
var global = 0;
function f() {
try {
try {
return 10;
} finally {
global += 21;
%DeoptimizeNow();
}
} finally {
global += 21;
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
global = 0;
assertEquals(10, f());
assertEquals(42, global);
})();
(function DeoptimizeOuterFinallyReturnDoublyNested() {
var global = 0;
function f() {
try {
try {
return 10;
} finally {
global += 21;
}
} finally {
global += 21;
%DeoptimizeNow();
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
global = 0;
assertEquals(10, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyThrow() {
var global = 0;
function f() {
try {
global = 21;
throw 1;
global = 2;
} finally {
global += 21;
%DeoptimizeNow();
}
global = 3;
return 1;
}
try { f(); } catch(e) {}
try { f(); } catch(e) {}
%OptimizeFunctionOnNextCall(f);
assertThrowsEquals(f, 1);
assertEquals(42, global);
})();
(function DeoptimizeFinallyThrowNested() {
var global = 0;
function f() {
try {
try {
global = 10;
throw 1;
global = 2;
} finally {
global += 11;
%DeoptimizeNow();
}
global = 4;
} finally {
global += 21;
}
global = 3;
return 1;
}
try { f(); } catch(e) {}
try { f(); } catch(e) {}
%OptimizeFunctionOnNextCall(f);
assertThrowsEquals(f, 1);
assertEquals(42, global);
})();
(function DeoptimizeFinallyContinue() {
var global = 0;
function f() {
global = 0;
for (var i = 0; i < 2; i++) {
try {
if (i == 0) continue;
global += 10;
} finally {
global += 6;
%DeoptimizeNow();
}
global += 20;
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(1, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyContinueNestedTry() {
var global = 0;
function f() {
global = 0;
for (var i = 0; i < 2; i++) {
try {
try {
if (i == 0) continue;
global += 5;
} finally {
global += 4;
%DeoptimizeNow();
}
global += 5;
} finally {
global += 2;
}
global += 20;
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(1, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyBreak() {
var global = 0;
function f() {
global = 0;
for (var i = 0; i < 2; i++) {
try {
global += 20;
if (i == 0) break;
global += 5;
} finally {
global += 22;
%DeoptimizeNow();
}
global += 5;
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(1, f());
assertEquals(42, global);
})();
(function DeoptimizeFinallyBreakNested() {
var global = 0;
function f() {
global = 0;
for (var i = 0; i < 2; i++) {
try {
try {
global += 20;
if (i == 0) break;
global += 5;
} finally {
global += 12;
%DeoptimizeNow();
}
global += 8;
} finally {
global += 10;
}
global += 5;
}
return 1;
}
f();
f();
%OptimizeFunctionOnNextCall(f);
assertEquals(1, f());
assertEquals(42, global);
})();