library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: 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'.
// Try changing the type of the left hand side, or casting the right hand side to 'List<int>'.
//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
//                                                                   ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:68: 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'.
// Try changing the type of the left hand side, or casting the right hand side to 'Stream<List<int>>'.
//   yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
//                                                                    ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: 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'.
// Try changing the type of the left hand side, or casting the right hand side to 'Map<int, int>'.
//   yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
//                                                                   ^
//
// pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:77: 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'.
// Try changing the type of the left hand side, or casting the right hand side to 'Iterable<Map<int, int>>'.
//   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;
}
static method foo() → asy::Stream<core::List<core::int>> async* {
  yield core::List::•<core::int>();
  yield let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: 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'.
Try changing the type of the left hand side, or casting the right hand side to 'List<int>'.
  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
                                                                  ^" in self::MyStream::•<dynamic>() as{TypeError} core::List<core::int>;
  yield* let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:68: 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'.
Try changing the type of the left hand side, or casting the right hand side to 'Stream<List<int>>'.
  yield* /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
                                                                   ^" in core::List::•<dynamic>() as{TypeError} asy::Stream<core::List<core::int>>;
  yield* self::MyStream::•<core::List<core::int>>();
}
static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
  yield core::Map::•<core::int, core::int>();
  yield let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: 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'.
Try changing the type of the left hand side, or casting the right hand side to 'Map<int, int>'.
  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
                                                                  ^" in core::List::•<dynamic>() as{TypeError} core::Map<core::int, core::int>;
  yield* let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:77: 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'.
Try changing the type of the left hand side, or casting the right hand side to 'Iterable<Map<int, int>>'.
  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* core::List::•<core::Map<core::int, core::int>>();
}
static method main() → dynamic {}
