Index: test/mjsunit/compiler/try-context.js |
diff --git a/test/mjsunit/compiler/try-context.js b/test/mjsunit/compiler/try-context.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4e6d9b028c10c7689080882c8d7da479fefae247 |
--- /dev/null |
+++ b/test/mjsunit/compiler/try-context.js |
@@ -0,0 +1,89 @@ |
+// 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 TryBlockCatch() { |
+ var global = 0; |
+ function f(a) { |
+ var x = a + 23 |
+ try { |
+ let y = a + 42; |
+ function capture() { return x + y } |
+ throw "boom!"; |
+ } catch(e) { |
+ global = x; |
+ } |
+ return x; |
+ } |
+ assertEquals(23, f(0)); |
+ assertEquals(24, f(1)); |
+ %OptimizeFunctionOnNextCall(f); |
+ assertEquals(25, f(2)); |
+ assertEquals(25, global); |
+})(); |
+ |
+(function TryBlockFinally() { |
+ var global = 0; |
+ function f(a) { |
+ var x = a + 23 |
+ try { |
+ let y = a + 42; |
+ function capture() { return x + y } |
+ throw "boom!"; |
+ } finally { |
+ global = x; |
+ } |
+ return x; |
+ } |
+ assertThrows(function() { f(0) }); |
+ assertThrows(function() { f(1) }); |
+ %OptimizeFunctionOnNextCall(f); |
+ assertThrows(function() { f(2) }); |
+ assertEquals(25, global); |
+})(); |
+ |
+(function TryCatchCatch() { |
+ var global = 0; |
+ function f(a) { |
+ var x = a + 23 |
+ try { |
+ try { |
+ throw "boom!"; |
+ } catch(e2) { |
+ function capture() { return x + y } |
+ throw "boom!"; |
+ } |
+ } catch(e) { |
+ global = x; |
+ } |
+ return x; |
+ } |
+ assertEquals(23, f(0)); |
+ assertEquals(24, f(1)); |
+ %OptimizeFunctionOnNextCall(f); |
+ assertEquals(25, f(2)); |
+ assertEquals(25, global); |
+})(); |
+ |
+(function TryWithCatch() { |
+ var global = 0; |
+ function f(a) { |
+ var x = a + 23 |
+ try { |
+ with ({ y : a + 42 }) { |
+ function capture() { return x + y } |
+ throw "boom!"; |
+ } |
+ } catch(e) { |
+ global = x; |
+ } |
+ return x; |
+ } |
+ assertEquals(23, f(0)); |
+ assertEquals(24, f(1)); |
+ %OptimizeFunctionOnNextCall(f); |
+ assertEquals(25, f(2)); |
+ assertEquals(25, global); |
+})(); |