library;
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → self::Class*
    ;
  get m1() → core::int*
    ;
  set m2(core::int* x) → void
    ;
  abstract member-signature get _identityHashCode() → core::int*;
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
  abstract member-signature operator ==(dynamic other) → core::bool*;
  abstract member-signature get hashCode() → core::int*;
  abstract member-signature method toString() → core::String*;
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
  abstract member-signature get runtimeType() → core::Type*;
}
extension Extension0 on self::Class* {
  get m2 = self::Extension0|get#m2;
  get m4 = self::Extension0|get#m4;
  set m1 = self::Extension0|set#m1;
  set m3 = self::Extension0|set#m3;
}
extension Extension1 on self::Class* {
  get m3 = self::Extension1|get#m3;
  set m4 = self::Extension1|set#m4;
}
static method Extension0|set#m1(final self::Class* #this, core::int* x) → void
  ;
static method Extension0|get#m2(final self::Class* #this) → core::int*
  ;
static method Extension0|set#m3(final self::Class* #this, core::int* x) → void
  ;
static method Extension0|get#m4(final self::Class* #this) → core::int*
  ;
static method Extension1|get#m3(final self::Class* #this) → core::int*
  ;
static method Extension1|set#m4(final self::Class* #this, core::int* x) → void
  ;
static method main() → dynamic
  ;
static method errors() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
