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