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

import "dart:async";

abstract class MyFuture extends core::Object implements asy::Future<core::int> {
  synthetic constructor •() → self::MyFuture
    : 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 {}
