// 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 --harmony-do-expressions (function DoTryCatchInsideBinop() { function f(a, b) { return a + do { try { throw "boom" } catch(e) { b } } } assertEquals(3, f(1, 2)); assertEquals(3, f(1, 2)); %OptimizeFunctionOnNextCall(f); assertEquals(3, f(1, 2)); })(); (function DoTryCatchInsideCall() { function f(a, b) { return Math.max(a, do { try { throw a } catch(e) { e + b } }) } assertEquals(3, f(1, 2)); assertEquals(3, f(1, 2)); %OptimizeFunctionOnNextCall(f); assertEquals(3, f(1, 2)); })(); (function DoTryCatchInsideTry() { function f(a, b) { try { return do { try { throw a } catch(e) { e + b } } } catch(e) {} } assertEquals(3, f(1, 2)); assertEquals(3, f(1, 2)); %OptimizeFunctionOnNextCall(f); assertEquals(3, f(1, 2)); })(); (function DoTryCatchInsideFinally() { function f(a, b) { try {} finally { return do { try { throw a } catch(e) { e + b } } } } assertEquals(3, f(1, 2)); assertEquals(3, f(1, 2)); %OptimizeFunctionOnNextCall(f); assertEquals(3, f(1, 2)); })();