/*
 * Copyright (c) 2020, 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 A read of a field or variable which is marked as late which has
 * not yet been written to causes the initializer expression of the variable to
 * be evaluated to a value, assigned to the variable or field, and returned as
 * the value of the read.
 * ...
 * Evaluating the initializer expression may cause an exception to be thrown. If
 * the variable was written to before the exception was thrown, the value of the
 * variable on subsequent reads is the last written value. If the variable was
 * not written before the exception was thrown, then the next read attempts to
 * evaluate the initializer expression again.
 *
 * @description Check that if evaluating of the initializer expression throws an
 * exception then the value of the variable is the last written value
 * @author sgrekhov@unipro.ru
 * @issue 38734
 */
// Requirements=nnbd-weak
import "../../../Utils/expect.dart";

class C {
  static String initS(String val1, String val2) {
    s = val1;
    throw new Exception();
  }
  static late String s = initS("No woman", "no cry");

  covariant late String v1 = initV1("No woman", "no cry");
  late String v2 = initV2("No woman", "no cry");

  initV1(String val1, String val2) {
    v1 = val1;
    throw new Exception();
  }

  initV2(String val1, String val2) {
    v2 = val1;
    throw new Exception();
  }
}

late String g = initG("No woman", "no cry");

initG(String val1, String val2) {
  g = val1;
  throw new Exception();
}

main() {
  Expect.throws(() {C.s;});
  Expect.equals("No woman", C.s);
  Expect.throws(() {g;});
  Expect.equals("No woman", g);
  C c = new C();
  Expect.throws(() {c.v1;});
  Expect.equals("No woman", c.v1);
  Expect.throws(() {c.v2;});
  Expect.equals("No woman", c.v2);
}
