| /* |
| * 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. |
| */ |
| /** |
| * @assertion Let d be the declaration of a variable v. If d is a local or |
| * instance variable, then the invocation of the implicit getter of v |
| * evaluates to the value stored in v. |
| * If d is a static or library variable then the implicit getter method of v |
| * executes as follows: |
| * Non-constant variable declaration with initializer. If d is of one of the |
| * forms var v = e; , T v = e; , final v = e; , final T v = e; , static v = e; |
| * ,static T v = e; , static final v = e; or static final T v = e; and no |
| * value has yet been stored into v then the initializer expression e is |
| * evaluated. If, during the evaluation of e, the getter for v is invoked, |
| * a CyclicInitializationError is thrown. If the evaluation succeeded yielding |
| * an object o, let r = o, otherwise let r = null. In any case, r is stored |
| * into v. The result of executing the getter is r. |
| * Constant variable declaration. If d is of one of the forms const v = e; , |
| * const T v = e; , static const v = e; or static const T v = e; the result |
| * of the getter is the value of the compile time constant e. Note that a |
| * compile time constant cannot depend on itself, so no cyclic references can |
| * occur. Otherwise |
| * Variable declaration without initializer. The result of executing the |
| * getter method is the value stored in v. |
| * @description Checks that CyclicInitializationError is thrown when getter |
| * is referenced during evaluation of initialization expression. |
| * @author kaigorodov |
| * @reviewer rodionov |
| */ |
| import "../../Utils/expect.dart"; |
| |
| int f() { |
| return C.sTyped; |
| } |
| |
| class C { |
| static int sTyped = f(); |
| } |
| |
| |
| main() { |
| try { |
| C.sTyped; |
| Expect.fail('CyclicInitializationError is expected'); |
| } on CyclicInitializationError catch (e) { |
| } catch (e) { |
| Expect.fail('"$e" of type ${e.runtimeType} thrown instead of CyclicInitializationError'); |
| } |
| } |