• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// 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})();
90