library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

static method test() → dynamic {
  function f0() → core::int
    return 42;
  function f1() → asy::Future<core::int> async /* futureValueType= core::int */ 
    return 42;
  function f2() → core::int {
    return 42;
  }
  function f3() → asy::Future<core::int> async /* futureValueType= core::int */ {
    return 42;
  }
  function f4() → core::Iterable<core::int> sync* {
    yield 42;
  }
  function f5() → asy::Stream<core::int> async* {
    yield 42;
  }
  function f6() → core::num
    return 42;
  function f7() → dynamic
    return f7(){() → dynamic};
  function f8() → asy::Stream<core::int>
    return f5(){() → asy::Stream<core::int>};
  () → core::int v0 = f0;
  () → asy::Future<core::int> v1 = f1;
  () → core::int v2 = f2;
  () → asy::Future<core::int> v3 = f3;
  () → core::Iterable<core::int> v4 = f4;
  () → asy::Stream<core::int> v5 = f5;
  () → core::num v6 = f6;
  () → dynamic v7 = f7;
  () → asy::Stream<core::int> v8 = f8;
}
static method main() → dynamic {}
