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

class Super extends core::Object {
  field core::int* superInstanceField;
  field dynamic untypedSuperInstanceField;
  synthetic constructor •() → self::Super*
    ;
  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*;
}
class C extends self::Super {
  field core::int* instanceField;
  field dynamic untypedInstanceField;
  static field core::double* staticField;
  static field dynamic untypedStaticField;
  synthetic constructor •() → self::C*
    ;
  method m() → dynamic
    ;
}
static field core::bool* topLevelField;
static field dynamic untypedTopLevelField;
static method main() → dynamic
  ;
