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 {}
