// Copyright (c) 2012, 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.

final x = foo();
var x2 = foo2();
var x3 = foo3();
var x4 = foo4();
var x5 = foo5();
final x6 = foo6();
var x7 = x7 + 1;

foo() { throw "interrupt initialization"; }
foo2() { x2 = 499; throw "interrupt initialization"; }
foo3() => x3 + 1;
foo4() {
  x4 = 498;
  x4 = x4 + 1;
  return x4;
}
foo5() {
  x5 = 498;
  x5 = x5 + 1;
}
foo6() {
  try {
    return x5 + 1;
  } catch (e) {
    return 499;
  }
}

fib(x) {
  if (x is! int) return 0;
  if (x < 2) return x;
  return fib(x - 1) + fib(x - 2);
}

main() {
  Expect.throws(() => fib(x), (e) => e == "interrupt initialization");
  Expect.equals(null, x);

  Expect.throws(() => fib(x2), (e) => e == "interrupt initialization");
  Expect.equals(499, x2);

  Expect.throws(() => fib(x3), (e) => e is RuntimeError);
  Expect.equals(null, x3);

  Expect.equals(499, x4);

  Expect.equals(null, x5);

  Expect.equals(499, x6);

  Expect.throws(() => fib(x7), (e) => e is RuntimeError);
}
