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

import "dart:async";

class Node extends core::Object {
  final field core::List<self::Node>? nested;
  final field core::String name;
  constructor •(core::String name, [core::List<self::Node>? nested = #C1]) → self::Node
    : self::Node::name = name, self::Node::nested = nested, super core::Object::•() {}
  method toString() → core::String
    return "<${this.{self::Node::name}{core::String}}:[${let final core::List<self::Node>? #t1 = this.{self::Node::nested}{core::List<self::Node>?} in #t1 == null ?{core::String?} null : #t1{core::List<self::Node>}.{core::Iterable::join}(", "){([core::String]) → core::String}}]>";
  method toSimpleString() → dynamic {
    core::Iterable<dynamic>? tmp = let final core::List<self::Node>? #t2 = this.{self::Node::nested}{core::List<self::Node>?} in #t2 == null ?{core::Iterable<dynamic>?} null : #t2{core::List<self::Node>}.{core::Iterable::map}<dynamic>((self::Node child) → dynamic => child.{self::Node::toSimpleString}(){() → dynamic}){((self::Node) → dynamic) → core::Iterable<dynamic>};
    return "${this.{self::Node::name}{core::String}} ${let final core::Iterable<dynamic>? #t3 = tmp in #t3 == null ?{core::String?} null : #t3{core::Iterable<dynamic>}.{core::Iterable::join}(" "){([core::String]) → core::String}}".{core::String::trim}(){() → core::String};
  }
}
static method main() → void async /* emittedValueType= void */ {
  core::String expected = "1 2 3 4 5 6 7 8 9 10";
  self::Node node = new self::Node::•("1", core::_GrowableList::_literal3<self::Node>(new self::Node::•("2", core::_GrowableList::•<self::Node>(0)), await asy::Future::value<self::Node>(new self::Node::•("3", core::_GrowableList::_literal1<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("4", core::_GrowableList::_literal1<self::Node>(new self::Node::•("5", core::_GrowableList::_literal3<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("6", core::_GrowableList::_literal1<self::Node>(await asy::Future::value<self::Node>(new self::Node::•("7", core::_GrowableList::•<self::Node>(0)))))), await asy::Future::value<self::Node>(new self::Node::•("8", core::_GrowableList::•<self::Node>(0))), await asy::Future::value<self::Node>(new self::Node::•("9", core::_GrowableList::•<self::Node>(0))))))))))), await asy::Future::value<self::Node>(new self::Node::•("10", core::_GrowableList::•<self::Node>(0)))));
  core::String actual = node.{self::Node::toSimpleString}(){() → dynamic} as{TypeError,ForDynamic} core::String;
  core::print(actual);
  if(!(actual =={core::String::==}{(core::Object) → core::bool} expected)) {
    throw "Expected '${expected}' but got '${actual}'";
  }
}

constants  {
  #C1 = null
}
