library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_late_helper" as _la;
import "late_statics_lib.dart" as lat;
additionalExports = (lat::c,
  lat::c,
  lat::d,
  lat::a,
  lat::b)

import "org-dartlang-testcase:///late_statics_lib.dart" as lib;
export "org-dartlang-testcase:///late_statics_lib.dart";

class Statics extends core::Object {
  static final field _la::_Cell a = new _la::_Cell::•();
  static final field _la::_Cell b = new _la::_Cell::•();
  late static field core::int c = 1.{core::int::unary-}(){() → core::int};
  late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
  synthetic constructor •() → self::Statics
    : super core::Object::•()
    ;
}
static method main() → void {
  self::testUninitializedNonFinalStaticField();
  self::testUninitializedFinalStaticField();
  self::testInitializedNonFinalStaticField();
  self::testInitializedFinalStaticField();
  self::testUninitializedNonFinalTopLevelField();
  self::testUninitializedFinalTopLevelField();
  self::testInitializedNonFinalTopLevelField();
  self::testInitializedFinalTopLevelField();
}
static method testUninitializedNonFinalStaticField() → void {
  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
  self::Statics::a.{_la::_Cell::value} = 42;
  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
}
static method testUninitializedFinalStaticField() → void {
  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
  self::Statics::b.{_la::_Cell::finalFieldValue} = 42;
  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
}
static method testInitializedNonFinalStaticField() → void {
  core::print(self::Statics::c);
  self::Statics::c = 42;
  core::print(self::Statics::c);
}
static method testInitializedFinalStaticField() → void {
  core::print(self::Statics::d);
}
static method testUninitializedNonFinalTopLevelField() → void {
  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
  lat::a.{_la::_Cell::value} = 42;
  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
}
static method testUninitializedFinalTopLevelField() → void {
  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
  lat::b.{_la::_Cell::finalFieldValue} = 42;
  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
}
static method testInitializedNonFinalTopLevelField() → void {
  core::print(lat::c);
  lat::c = 42;
  core::print(lat::c);
}
static method testInitializedFinalTopLevelField() → void {
  core::print(lat::d);
}

library /*isNonNullableByDefault*/;
import self as lat;
import "dart:_late_helper" as _la;
import "dart:core" as core;

static final field _la::_Cell a = new _la::_Cell::•();
static final field _la::_Cell b = new _la::_Cell::•();
late static field core::int c = 1.{core::int::unary-}(){() → core::int};
late static final field core::int d = 1.{core::int::unary-}(){() → core::int};


Extra constant evaluation status:
Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:22:23 -> DoubleConstant(-1.0)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:23:29 -> DoubleConstant(-1.0)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:7:14 -> DoubleConstant(-1.0)
Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:8:20 -> DoubleConstant(-1.0)
Extra constant evaluation: evaluated: 62, effectively constant: 4
