blob: 4e6d9b028c10c7689080882c8d7da479fefae247 [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax
6
7(function TryBlockCatch() {
8 var global = 0;
9 function f(a) {
10 var x = a + 23
11 try {
12 let y = a + 42;
13 function capture() { return x + y }
14 throw "boom!";
15 } catch(e) {
16 global = x;
17 }
18 return x;
19 }
20 assertEquals(23, f(0));
21 assertEquals(24, f(1));
22 %OptimizeFunctionOnNextCall(f);
23 assertEquals(25, f(2));
24 assertEquals(25, global);
25})();
26
27(function TryBlockFinally() {
28 var global = 0;
29 function f(a) {
30 var x = a + 23
31 try {
32 let y = a + 42;
33 function capture() { return x + y }
34 throw "boom!";
35 } finally {
36 global = x;
37 }
38 return x;
39 }
40 assertThrows(function() { f(0) });
41 assertThrows(function() { f(1) });
42 %OptimizeFunctionOnNextCall(f);
43 assertThrows(function() { f(2) });
44 assertEquals(25, global);
45})();
46
47(function TryCatchCatch() {
48 var global = 0;
49 function f(a) {
50 var x = a + 23
51 try {
52 try {
53 throw "boom!";
54 } catch(e2) {
55 function capture() { return x + y }
56 throw "boom!";
57 }
58 } catch(e) {
59 global = x;
60 }
61 return x;
62 }
63 assertEquals(23, f(0));
64 assertEquals(24, f(1));
65 %OptimizeFunctionOnNextCall(f);
66 assertEquals(25, f(2));
67 assertEquals(25, global);
68})();
69
70(function TryWithCatch() {
71 var global = 0;
72 function f(a) {
73 var x = a + 23
74 try {
75 with ({ y : a + 42 }) {
76 function capture() { return x + y }
77 throw "boom!";
78 }
79 } catch(e) {
80 global = x;
81 }
82 return x;
83 }
84 assertEquals(23, f(0));
85 assertEquals(24, f(1));
86 %OptimizeFunctionOnNextCall(f);
87 assertEquals(25, f(2));
88 assertEquals(25, global);
89})();