library test /*isNonNullableByDefault*/;
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 /* futureValueType= dynamic */ {
  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 = core::_GrowableList::_literal2<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>(core::_GrowableList::_literal2<asy::Future<self::A>>(b, c));
  core::List<self::A> list = result;
  list = result2;
}
