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

class Class1 extends core::Object {
  synthetic constructor •() → self::Class1
    ;
  static method _#new#tearOff() → self::Class1
    return new self::Class1::•();
}
class Class2 extends core::Object {
  constructor named() → self::Class2
    ;
  static method _#named#tearOff() → self::Class2
    return new self::Class2::named();
}
class Class3 extends core::Object {
  final field core::int field;
  constructor •(core::int field) → self::Class3
    ;
  static method _#new#tearOff(core::int field) → self::Class3
    return new self::Class3::•(field);
}
class Class4 extends core::Object {
  final field core::int? field;
  constructor •([core::int? field]) → self::Class4
    ;
  static method _#new#tearOff([core::int? field]) → self::Class4
    return new self::Class4::•(field);
}
class Class5 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  constructor •(core::int field1, [core::int? field2]) → self::Class5
    ;
  static method _#new#tearOff(core::int field1, [core::int? field2]) → self::Class5
    return new self::Class5::•(field1, field2);
}
class Class6 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  final field core::int field3;
  constructor •(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
    ;
  static method _#new#tearOff(core::int field1, {core::int? field2, required core::int field3}) → self::Class6
    return new self::Class6::•(field1, field2: field2, field3: field3);
}
static final field core::bool inSoundMode;
static method main() → dynamic
  ;
static method testNoArgs() → dynamic
  ;
static method testArgs() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method throws(() → dynamic f, {core::bool inSoundModeOnly}) → dynamic
  ;
