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::named("a");
  static final field _la::_Cell b = new _la::_Cell::named("b");
  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::named("a");
static final field _la::_Cell b = new _la::_Cell::named("b");
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
