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 {
  dynamic b = asy::Future::value<self::B>(new self::B::•());
  dynamic c = asy::Future::value<self::C>(new self::C::•());
  dynamic lll = <dynamic>[b, c];
  dynamic result = await asy::Future::wait<dynamic>(lll);
  dynamic result2 = await asy::Future::wait<dynamic>(<dynamic>[b, c]);
  core::List<self::A> list = result;
  list = result2;
}
