// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// This test ensures that the finally block executes correctly when
// there are throw, break and return statements in the finally block.

// @dart = 2.9

import "package:expect/expect.dart";

class Hello {
  static var sum;

  static foo() {
    sum = 0;
    try {
      sum += 1;
      return 'hi';
    } finally {
      sum += 1;
      throw 'ball';
      sum += 1;
    }
  }

  static foo1() {
    bool loop = true;
    sum = 0;
    L:
    while (loop) {
      try {
        sum += 1;
        return 'hi';
      } finally {
        sum += 1;
        break L;
        sum += 1;
      }
    }
  }

  static foo2() {
    bool loop = true;
    sum = 0;
    try {
      sum += 1;
      return 'hi';
    } finally {
      sum += 1;
      return 10;
      sum += 1;
    }
  }

  static foo3() {
    sum = 0;
    try {
      sum += 1;
      return 'hi';
    } finally {
      sum += 1;
      return 10;
      sum += 1;
    }
  }

  static void main() {
    foo1();
    Expect.equals(2, sum);
    foo2();
    Expect.equals(2, sum);
    foo3();
    Expect.equals(2, sum);
    try {
      foo();
    } catch (e) {}
    Expect.equals(2, sum);
  }
}

main() {
  Hello.main();
}
