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

import "dart:async";

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C extends self::A {
  synthetic constructor •() → self::C
    : super self::A::•()
    ;
}
static method main() → dynamic async {
  asy::Future<self::B> b = asy::Future::value<self::B>(new self::B::•());
  asy::Future<self::C> c = asy::Future::value<self::C>(new self::C::•());
  core::List<asy::Future<self::A>> lll = <asy::Future<self::A>>[b, c];
  core::List<self::A> result = await asy::Future::wait<self::A>(lll);
  core::List<self::A> result2 = await asy::Future::wait<self::A>(<asy::Future<self::A>>[b, c]);
  core::List<self::A> list = result;
  list = result2;
}
