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

class C extends core::Object {
  synthetic constructor •() → self::C
    ;
}
extension A on self::C {
  method method = self::A|method;
  tearoff method = self::A|get#method;
  get getter = self::A|get#getter;
  get property = self::A|get#property;
  operator + = self::A|+;
  operator unary- = self::A|unary-;
  operator [] = self::A|[];
  set setter = self::A|set#setter;
}
extension B on self::C {
  method method = self::B|method;
  tearoff method = self::B|get#method;
  get getter = self::B|get#getter;
  operator + = self::B|+;
  operator unary- = self::B|unary-;
  operator []= = self::B|[]=;
  set setter = self::B|set#setter;
  set property = self::B|set#property;
}
static method A|method(lowered final self::C #this) → void
  ;
static method A|get#method(lowered final self::C #this) → () → void
  return () → void => self::A|method(#this);
static method A|get#getter(lowered final self::C #this) → core::int
  ;
static method A|set#setter(lowered final self::C #this, core::int value) → void
  ;
static method A|get#property(lowered final self::C #this) → core::int
  ;
static method A|+(lowered final self::C #this, core::int i) → core::int
  ;
static method A|unary-(lowered final self::C #this) → core::int
  ;
static method A|[](lowered final self::C #this, core::int i) → core::int
  ;
static method B|method(lowered final self::C #this) → void
  ;
static method B|get#method(lowered final self::C #this) → () → void
  return () → void => self::B|method(#this);
static method B|get#getter(lowered final self::C #this) → core::int
  ;
static method B|set#setter(lowered final self::C #this, core::int value) → void
  ;
static method B|set#property(lowered final self::C #this, core::int value) → void
  ;
static method B|+(lowered final self::C #this, core::int i) → core::int
  ;
static method B|unary-(lowered final self::C #this) → core::int
  ;
static method B|[]=(lowered final self::C #this, core::int i, core::int j) → void
  ;
static method errors(self::C c) → dynamic
  ;
static method main() → dynamic
  ;
