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

class A extends core::Object {
  field dynamic field = null;
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends core::Object {
  field dynamic field = null;
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
}
class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  operator ==(core::Object x) → core::bool
    return false;
}
class X extends core::Object implements self::A, self::B {
  field dynamic field = null;
  synthetic constructor •() → self::X
    : super core::Object::•()
    ;
}
static method useAsA(self::A object) → void {
  dynamic _ = object.{self::A::field}{dynamic};
}
static method useAsB(self::B object) → void {
  dynamic _ = object.{self::B::field}{dynamic};
  self::escape(object);
}
static method escape(dynamic x) → void {
  x == null ?{dynamic} x = "" : null;
  x == null ?{dynamic} x = 45 : null;
  if(!(x is{ForNonNullableByDefault} core::int) && !(x is{ForNonNullableByDefault} core::String)) {
    x{dynamic}.field = 45;
  }
}
static method main() → dynamic {
  self::X object = new self::X::•();
  self::useAsA(new self::A::•());
  self::useAsA(object);
  self::useAsB(new self::B::•());
  self::useAsB(object);
}
