// Copyright (c) 2016, 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 Error thrown when a lazily initialized variable cannot be
/// initialized.
/// A static/library variable with an initializer expression is initialized the
/// first time it is read. If evaluating the initializer expression causes
/// another read of the variable, this error is thrown.
///
/// @description
/// From https://github.com/dart-lang/language/blob/master/accepted/future-releases/nnbd/feature-specification.md#late-fields-and-variables:
/// If a variable or field is read from during the process of evaluating its own
/// initializer expression, and no write to the variable has occurred, the read
/// is treated as a first read and the initializer expression is evaluated again.
///
/// A toplevel or static variable with an initializer is evaluated as if it was
/// marked [late]. Note that this is a change from pre-NNBD semantics in that:
///
/// Throwing an exception during initializer evaluation no longer sets the
/// variable to [null]
///
/// Reading the variable during initializer evaluation is no longer checked for,
/// and does not cause an error.
///
/// The test checks that if evaluating the initializer expression causes
/// another read of the variable, then [CyclicInitializationError] is not thrown
/// and [StackOverflowError] happens instead.
/// @Issue 42470
/// @issue 42893
/// @author sgrekhov@unipro.ru

import "../../../Utils/expect.dart";

class C {
  static var x = f();
  static f() => x + 1;
}

main() {
  try {
    C.x;
    Expect.fail("StackOverflowError should be thrown");
  } on CyclicInitializationError catch (e) {
    Expect.fail("StackOverflowError should be thrown");
  } on Error catch (e) {
    // See https://github.com/dart-lang/sdk/issues/42893
  }
}
