main = main::main;
library from "org-dartlang-test:///lib1.dart" as lib1 {

  import "org-dartlang-test:///lib2.dart";

  class Foo extends dart.core::Object {
    static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
    static factory •() → lib1::Foo
      return new lib2::Bar::•();
  }
  static method libMethod() → void {
    lib1::Foo foo = new lib2::Bar::•();
    lib2::Bar bar = new lib2::Bar::•();
    dart.core::print(foo =={dart.core::Object::==}{(dart.core::Object) → dart.core::bool} bar);
  }
}
library from "org-dartlang-test:///lib2.dart" as lib2 {

  import "org-dartlang-test:///lib1.dart";

  class Bar extends dart.core::Object implements lib1::Foo {
    constructor •() → lib2::Bar
      : super dart.core::Object::•()
      ;
  }
}
library from "org-dartlang-test:///main.dart" as main {

  import "org-dartlang-test:///lib1.dart";

  static method main() → dynamic {
    lib1::libMethod();
  }
}
constants  {
  #C1 = constructor-tearoff lib1::Foo::•
}
