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

import "package:expect/expect.dart";

final x = foo();
var x2 = foo2();
var x3 = foo3();
var x4 = foo4();
var x5 = foo5();
final x6 = foo6();
int 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(null, x2);

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

  Expect.equals(499, x4);

  Expect.equals(null, x5);

  Expect.equals(499, x6);

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