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