| // 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. |
| |
| // @dart = 2.9 |
| |
| 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); |
| } |