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

import "dart:async";

class X extends core::Object {
  final field dynamic x;
  final field dynamic y;
  constructor •(dynamic x, dynamic y) → self::X
    : self::X::x = x, self::X::y = y, super core::Object::•()
    ;
  method toString() → core::String
    return "X(${this.{self::X::x}{dynamic}}, ${this.{self::X::y}{dynamic}})";
}
class Y extends core::Object {
  synthetic constructor •() → self::Y
    : super core::Object::•()
    ;
  method f(wildcard dynamic _#wc0#formal) → dynamic {}
}
static method f1() → asy::Future<core::List<core::Object>> async /* emittedValueType= core::List<core::Object> */ {
  return core::_GrowableList::_literal1<core::Object>(1);
}
static method f2() → core::List<core::Object>
  return core::_GrowableList::_literal1<core::Object>(2);
static method f3() → asy::Future<core::Object> async /* emittedValueType= core::Object */ {
  return 3;
}
static method foo() → asy::Future<self::X> async /* emittedValueType= self::X */ {
  return new self::X::•(let final self::Y #t1 = new self::Y::•() in block {
    #t1.{self::Y::f}(await self::f1()){(dynamic) → dynamic};
    #t1.{self::Y::f}(self::f2()){(dynamic) → dynamic};
  } =>#t1, await self::f3());
}
static method main() → asy::Future<void> async /* emittedValueType= void */ {
  core::print(await self::foo());
}
