// 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.
// Dart test program for testing execution of finally blocks after an exception
// is thrown from inside a local function capturing a variable.


class MyException {
  const MyException(String message) : message_ = message;
  final String message_;
}

class Helper {
  static int f1(int k) {
    var b;
    try {
      var a = new List(10);
      int i = 0;
      while (i < 10) {
        int j = i;
        a[i] = () {
          if (j == 5) {
            throw new MyException("Test for exception being thrown");
          }
          k += 10;
          return j;
        };
        if (i == 0) {
          b = a[i];
        }
        i++;
      }
      for(int i = 0; i < 10; i++) {
        a[i]();
      }
    } on MyException catch (exception) {
      k += 100;
      print(exception.message_);
      b();
    } finally {
      k += 1000;
      b();
    }
    return k;
  }
}

class ExecuteFinally7Test {
  static testMain() {
    Expect.equals(1171, Helper.f1(1));
  }
}

main() {
  ExecuteFinally7Test.testMain();
}
