library test;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

abstract class MyFuture extends core::Object implements asy::Future<core::int> {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
static method test() → void async {
  core::int x0;
  asy::Future<core::int> x1;
  asy::Future<asy::Future<core::int>> x2;
  asy::Future<asy::FutureOr<core::int>> x3;
  asy::Future<self::MyFuture> x4;
  asy::FutureOr<core::int> x5;
  asy::FutureOr<asy::Future<core::int>> x6;
  asy::FutureOr<asy::FutureOr<core::int>> x7;
  asy::FutureOr<self::MyFuture> x8;
  self::MyFuture x9;
  function test0() → asy::Future<core::int> async 
    return x0;
  function test1() → asy::Future<core::int> async 
    return x1;
  function test2() → asy::Future<asy::Future<core::int>> async 
    return x2;
  function test3() → asy::Future<asy::FutureOr<core::int>> async 
    return x3;
  function test4() → asy::Future<self::MyFuture> async 
    return x4;
  function test5() → asy::Future<core::int> async 
    return x5;
  function test6() → asy::Future<asy::Future<core::int>> async 
    return x6;
  function test7() → asy::Future<asy::FutureOr<core::int>> async 
    return x7;
  function test8() → asy::Future<self::MyFuture> async 
    return x8;
  function test9() → asy::Future<core::int> async 
    return x9;
  core::int y0 = await x0;
  core::int y1 = await x1;
  asy::Future<core::int> y2 = await x2;
  asy::FutureOr<core::int> y3 = await x3;
  self::MyFuture y4 = await x4;
  core::int y5 = await x5;
  asy::Future<core::int> y6 = await x6;
  asy::FutureOr<core::int> y7 = await x7;
  self::MyFuture y8 = await x8;
  core::int y9 = await x9;
}
static method main() → dynamic {}
