// 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.

import "package:expect/expect.dart";

class Hello {
 static var sum;

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

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

 static void main() {
   foo1();
   Expect.equals(3, sum);
   try {
     foo();
   } catch (e) {
     // Ignore.
   }
   Expect.equals(2, sum);
 }

}

main() {
  Hello.main();
}
