library;
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 ==(dynamic 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};
}
static method useAsB(self::B* object) → void {
  dynamic _ = object.{self::B::field};
  self::escape(object);
}
static method escape(dynamic x) → void {
  x.{core::Object::==}(null) ?{dynamic} x = "" : null;
  x.{core::Object::==}(null) ?{dynamic} x = 45 : null;
  if(!(x is core::int*) && !(x is core::String*)) {
    x.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);
}
