library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
//  - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
//  - 'List' is from 'dart:core'.
//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
//                                                                     ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:70: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
//  - 'List' is from 'dart:core'.
//  - 'Stream' is from 'dart:async'.
//   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ List();
//                                                                      ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:69: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
//  - 'List' is from 'dart:core'.
//  - 'Map' is from 'dart:core'.
//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ List();
//                                                                     ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
//  - 'Map' is from 'dart:core'.
//  - 'Iterable' is from 'dart:core'.
//   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
//                                                                               ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;

import "dart:async";

abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
  static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
    return null;
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ forEach((self::MyStream::T*) →* void action) → asy::Future<dynamic>*; -> asy::Stream::forEach
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ every((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::every
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ any((self::MyStream::T*) →* core::bool* test) → asy::Future<core::bool*>*; -> asy::Stream::any
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ length() → asy::Future<core::int*>*; -> asy::Stream::length
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ isEmpty() → asy::Future<core::bool*>*; -> asy::Stream::isEmpty
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ cast<R extends core::Object* = dynamic>() → asy::Stream<self::MyStream::cast::R*>*; -> asy::Stream::cast
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ toList() → asy::Future<core::List<self::MyStream::T*>*>*; -> asy::Stream::toList
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ toSet() → asy::Future<core::Set<self::MyStream::T*>*>*; -> asy::Stream::toSet
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ drain<E extends core::Object* = dynamic>([self::MyStream::drain::E* futureValue = #C1]) → asy::Future<self::MyStream::drain::E*>*; -> asy::Stream::drain
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ take(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::take
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ takeWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::takeWhile
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ skip(core::int* count) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skip
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ skipWhile((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::skipWhile
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ distinct([(self::MyStream::T*, self::MyStream::T*) →* core::bool* equals = #C1]) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::distinct
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/async/stream.dart */ timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ toString() → core::String*; -> core::Object::toString
  abstract member-signature method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/object_patch.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method foo() → asy::Stream<core::List<core::int*>*>* /* originally async* */ {
  asy::_AsyncStarStreamController<core::List<core::int*>*>* :controller;
  dynamic :controller_stream;
  dynamic :async_stack_trace;
  (dynamic) →* dynamic :async_op_then;
  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
  core::int* :await_jump_var = 0;
  dynamic :await_ctx_var;
  dynamic :saved_try_context_var0;
  dynamic :saved_try_context_var1;
  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
    try
      try {
        #L1:
        {
          if(:controller.{asy::_AsyncStarStreamController::add}(core::_GrowableList::•<core::int*>(0)))
            return null;
          else
            [yield] null;
          if(:controller.{asy::_AsyncStarStreamController::add}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:69: Error: A value of type 'MyStream<dynamic>' can't be assigned to a variable of type 'List<int>'.
 - 'MyStream' is from 'pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart'.
 - 'List' is from 'dart:core'.
  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ MyStream();
                                                                    ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int*>*))
            return null;
          else
            [yield] null;
          if(:controller.{asy::_AsyncStarStreamController::addStream}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:70: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Stream<List<int>>'.
 - 'List' is from 'dart:core'.
 - 'Stream' is from 'dart:async'.
  yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ List();
                                                                     ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} asy::Stream<core::List<core::int*>*>*))
            return null;
          else
            [yield] null;
          if(:controller.{asy::_AsyncStarStreamController::addStream}(self::MyStream::•<core::List<core::int*>*>()))
            return null;
          else
            [yield] null;
        }
        return;
      }
      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
        :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace);
      }
    finally {
      :controller.{asy::_AsyncStarStreamController::close}();
    }
  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
  :controller = new asy::_AsyncStarStreamController::•<core::List<core::int*>*>(:async_op);
  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
  return :controller_stream;
}
static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>* /* originally sync* */ {
  function :sync_op_gen() → (core::_SyncIterator<dynamic>*) →* core::bool* {
    core::int* :await_jump_var = 0;
    dynamic :await_ctx_var;
    return (core::_SyncIterator<dynamic>* :iterator) → core::bool* yielding {
      {
        {
          :iterator.{core::_SyncIterator::_current} = core::Map::•<core::int*, core::int*>();
          [yield] true;
        }
        {
          :iterator.{core::_SyncIterator::_current} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:69: Error: A value of type 'List<dynamic>' can't be assigned to a variable of type 'Map<int, int>'.
 - 'List' is from 'dart:core'.
 - 'Map' is from 'dart:core'.
  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic */ List();
                                                                    ^" in core::_GrowableList::•<dynamic>(0) as{TypeError} core::Map<core::int*, core::int*>*;
          [yield] true;
        }
        {
          :iterator.{core::_SyncIterator::_yieldEachIterable} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:79: Error: A value of type 'Map<dynamic, dynamic>' can't be assigned to a variable of type 'Iterable<Map<int, int>>'.
 - 'Map' is from 'dart:core'.
 - 'Iterable' is from 'dart:core'.
  yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@ typeArgs=dynamic, dynamic */ Map();
                                                                              ^" in core::Map::•<dynamic, dynamic>() as{TypeError} core::Iterable<core::Map<core::int*, core::int*>*>*;
          [yield] true;
        }
        {
          :iterator.{core::_SyncIterator::_yieldEachIterable} = core::_GrowableList::•<core::Map<core::int*, core::int*>*>(0);
          [yield] true;
        }
      }
      return false;
    };
  }
  return new core::_SyncIterable::•<core::Map<core::int*, core::int*>*>(:sync_op_gen);
}
static method main() → dynamic {}

constants  {
  #C1 = null
  #C2 = ""
}
