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

import "dart:async";

class C extends core::Object {
  static field core::int* staticField;
  field core::int* field;
  synthetic constructor •() → self::C*
    ;
  static get staticGetter() → core::int*
    ;
  static set staticSetter(dynamic val) → void
    ;
  static method staticFoo(core::int* param) → core::int*
    ;
  get getter() → core::int*
    ;
  set setter(dynamic val) → void
    ;
  method foo(core::int* param) → core::int*
    ;
  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*;
}
static field core::int* globalVariable;
static final field core::bool* assertStatementsEnabled;
static method topLevelFoo(core::int* param) → core::int*
  ;
static get topLevelGetter() → core::int*
  ;
static set topLevelSetter(dynamic val) → void
  ;
static method dummy() → dynamic
  ;
static method staticMembers() → dynamic
  ;
static method topLevelMembers() → dynamic
  ;
static method instanceMembers() → dynamic
  ;
static method others() → dynamic
  ;
static method conditionals() → dynamic
  ;
static method asserts() → dynamic
  ;
static method controlFlow() → dynamic
  ;
static method future<T extends core::Object* = dynamic>(self::future::T* value) → asy::FutureOr<self::future::T*>*
  ;
static method id<T extends core::Object* = dynamic>(self::id::T* value) → asy::FutureOr<self::id::T*>*
  ;
static method intStream() → asy::Stream<core::int*>*
  ;
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual) → dynamic
  ;
static method expectList(core::List<dynamic>* expected, core::List<dynamic>* actual) → dynamic
  ;
