text: // 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));
  })();
  