library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
// const List<String> barWithIntSpread = [...foo, ...fortyTwo];
//                                                   ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
//  - 'Map' is from 'dart:core'.
// const List<String> barWithMapSpread = [...foo, ...quux];
//                                                   ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
// const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
//                                                  ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
// const Set<String> quxWithMapSpread = {...baz, ...quux};
//                                      ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
//  - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
//                                                           ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
// const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
//                                                            ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
// const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
//                                               ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
// const Map<String, String> mapWithSetSpread = {...baz};
//                                              ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:24:46: Error: Constant evaluation error:
// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
//                                              ^
// pkg/front_end/testcases/general/constants/const_collections.dart:24:58: Context: Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
//  - 'Iterable' is from 'dart:core'.
// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
//                                                          ^
// pkg/front_end/testcases/general/constants/const_collections.dart:24:20: Context: While analyzing:
// const List<String> barWithIntDynamicSpread = [...foo, ...fortyTwoAsDynamic];
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:26:51: Error: Constant evaluation error:
// const List<String> barWithCustomIterableSpread1 = [
//                                                   ^
// pkg/front_end/testcases/general/constants/const_collections.dart:28:12: Context: Only lists and sets can be used in spreads in constant lists and sets.
//   ...const CustomIterable()
//            ^
// pkg/front_end/testcases/general/constants/const_collections.dart:26:20: Context: While analyzing:
// const List<String> barWithCustomIterableSpread1 = [
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:30:51: Error: Constant evaluation error:
// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
//                                                   ^
// pkg/front_end/testcases/general/constants/const_collections.dart:30:63: Context: Only lists and sets can be used in spreads in constant lists and sets.
// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
//                                                               ^
// pkg/front_end/testcases/general/constants/const_collections.dart:30:20: Context: While analyzing:
// const List<String> barWithCustomIterableSpread2 = [...bar, ...CustomIterable()];
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:32:51: Error: Constant evaluation error:
// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
//                                                   ^
// pkg/front_end/testcases/general/constants/const_collections.dart:32:63: Context: Only lists and sets can be used in spreads in constant lists and sets.
// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
//                                                               ^
// pkg/front_end/testcases/general/constants/const_collections.dart:32:20: Context: While analyzing:
// const List<String> barWithCustomIterableSpread3 = [...bar, ...customIterable];
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:33:43: Error: Constant evaluation error:
// const List<String> listConcat = ["Hello"] + ["World"];
//                                           ^
// pkg/front_end/testcases/general/constants/const_collections.dart:33:43: Context: The method '+' can't be invoked on '<String>["Hello"]' in a constant expression.
// const List<String> listConcat = ["Hello"] + ["World"];
//                                           ^
// pkg/front_end/testcases/general/constants/const_collections.dart:33:20: Context: While analyzing:
// const List<String> listConcat = ["Hello"] + ["World"];
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:43:50: Error: Constant evaluation error:
// const Set<String> quxWithCustomIterableSpread1 = {
//                                                  ^
// pkg/front_end/testcases/general/constants/const_collections.dart:45:12: Context: Only lists and sets can be used in spreads in constant lists and sets.
//   ...const CustomIterable()
//            ^
// pkg/front_end/testcases/general/constants/const_collections.dart:43:19: Context: While analyzing:
// const Set<String> quxWithCustomIterableSpread1 = {
//                   ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:47:50: Error: Constant evaluation error:
// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
//                                                  ^
// pkg/front_end/testcases/general/constants/const_collections.dart:47:62: Context: Only lists and sets can be used in spreads in constant lists and sets.
// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
//                                                              ^
// pkg/front_end/testcases/general/constants/const_collections.dart:47:19: Context: While analyzing:
// const Set<String> quxWithCustomIterableSpread2 = {...baz, ...CustomIterable()};
//                   ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:49:48: Error: Constant evaluation error:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
//                                                ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:55: Context: The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
//  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
//                                                       ^
// pkg/front_end/testcases/general/constants/const_collections.dart:49:20: Context: While analyzing:
// const Set<dynamic> setWithNonPrimitiveEquals = {const WithEquals(42)};
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:50:40: Error: Constant evaluation error:
// const Set<dynamic> setWithDuplicates = {42, 42};
//                                        ^
// pkg/front_end/testcases/general/constants/const_collections.dart:50:45: Context: The element '42' conflicts with another existing element in the set.
// const Set<dynamic> setWithDuplicates = {42, 42};
//                                             ^
// pkg/front_end/testcases/general/constants/const_collections.dart:50:20: Context: While analyzing:
// const Set<dynamic> setWithDuplicates = {42, 42};
//                    ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Error: Constant evaluation error:
// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
//                           ^
// pkg/front_end/testcases/general/constants/const_collections.dart:61:57: Context: Only maps can be used in spreads in constant maps.
// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
//                                                         ^
// pkg/front_end/testcases/general/constants/const_collections.dart:61:27: Context: While analyzing:
// const Map<String, String> mapWithCustomMap1 = {...const CustomMap()};
//                           ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:62:27: Error: Constant evaluation error:
// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
//                           ^
// pkg/front_end/testcases/general/constants/const_collections.dart:62:51: Context: Only maps can be used in spreads in constant maps.
// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
//                                                   ^
// pkg/front_end/testcases/general/constants/const_collections.dart:62:27: Context: While analyzing:
// const Map<String, String> mapWithCustomMap2 = {...CustomMap()};
//                           ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:64:27: Error: Constant evaluation error:
// const Map<String, String> mapWithCustomMap3 = {...customMap};
//                           ^
// pkg/front_end/testcases/general/constants/const_collections.dart:64:51: Context: Only maps can be used in spreads in constant maps.
// const Map<String, String> mapWithCustomMap3 = {...customMap};
//                                                   ^
// pkg/front_end/testcases/general/constants/const_collections.dart:64:27: Context: While analyzing:
// const Map<String, String> mapWithCustomMap3 = {...customMap};
//                           ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:65:56: Error: Constant evaluation error:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
//                                                        ^
// pkg/front_end/testcases/general/constants/const_collections.dart:66:9: Context: The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
//  - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
//   const WithEquals(42): 42
//         ^
// pkg/front_end/testcases/general/constants/const_collections.dart:65:25: Context: While analyzing:
// const Map<dynamic, int> mapWithNonPrimitiveEqualsKey = {
//                         ^
//
// pkg/front_end/testcases/general/constants/const_collections.dart:68:41: Error: Constant evaluation error:
// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
//                                         ^
// pkg/front_end/testcases/general/constants/const_collections.dart:68:50: Context: The key '42' conflicts with another existing key in the map.
// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
//                                                  ^
// pkg/front_end/testcases/general/constants/const_collections.dart:68:21: Context: While analyzing:
// const Map<int, int> mapWithDuplicates = {42: 42, 42: 42};
//                     ^
//
import self as self;
import "dart:collection" as col;
import "dart:core" as core;

import "dart:collection";

class ConstIterable extends col::IterableBase<core::int> /*hasConstConstructor*/  {
  const constructor •() → self::ConstIterable
    : super col::IterableBase::•()
    ;
  get iterator() → core::Iterator<core::int>
    return core::_GrowableList::•<core::int>(0).{core::Iterable::iterator}{core::Iterator<core::int>};
}
class WithEquals extends core::Object /*hasConstConstructor*/  {
  final field core::int i;
  const constructor •(core::int i) → self::WithEquals
    : self::WithEquals::i = i, super core::Object::•()
    ;
  operator ==(core::Object o) → core::bool {
    return o is{ForNonNullableByDefault} self::WithEquals && o{self::WithEquals}.{self::WithEquals::i}{core::int} =={core::num::==}{(core::Object) → core::bool} this.{self::WithEquals::i}{core::int};
  }
}
class CustomIterable extends col::IterableBase<core::String> /*hasConstConstructor*/  {
  const constructor •() → self::CustomIterable
    : super col::IterableBase::•()
    ;
  get iterator() → core::Iterator<core::String>
    return core::_GrowableList::•<core::String>(0).{core::Iterable::iterator}{core::Iterator<core::String>};
}
class CustomMap extends core::Object implements core::Map<core::String, core::String> /*hasConstConstructor*/  {
  const constructor •() → self::CustomMap
    : super core::Object::•()
    ;
  @#C1
  get entries() → core::Iterable<core::MapEntry<core::String, core::String>>
    return core::_GrowableList::•<core::MapEntry<core::String, core::String>>(0);
  @#C1
  operator [](core::Object? key) → core::String
    return throw new core::UnimplementedError::•();
  @#C1
  operator []=(covariant-by-class core::String key, covariant-by-class core::String value) → void
    return throw new core::UnimplementedError::•();
  @#C1
  method cast<RK extends core::Object? = dynamic, RV extends core::Object? = dynamic>() → core::Map<self::CustomMap::cast::RK%, self::CustomMap::cast::RV%>
    return throw new core::UnimplementedError::•();
  @#C1
  method clear() → void
    return throw new core::UnimplementedError::•();
  @#C1
  method containsKey(core::Object? key) → core::bool
    return throw new core::UnimplementedError::•();
  @#C1
  method containsValue(core::Object? value) → core::bool
    return throw new core::UnimplementedError::•();
  @#C1
  get isEmpty() → core::bool
    return throw new core::UnimplementedError::•();
  @#C1
  get isNotEmpty() → core::bool
    return throw new core::UnimplementedError::•();
  @#C1
  get keys() → core::Iterable<core::String>
    return throw new core::UnimplementedError::•();
  @#C1
  get length() → core::int
    return throw new core::UnimplementedError::•();
  @#C1
  method remove(core::Object? key) → core::String
    return throw new core::UnimplementedError::•();
  @#C1
  get values() → core::Iterable<core::String>
    return throw new core::UnimplementedError::•();
  @#C1
  method addAll(covariant-by-class core::Map<core::String, core::String> other) → void
    return throw new core::UnimplementedError::•();
  @#C1
  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String, core::String>> newEntries) → void
    return throw new core::UnimplementedError::•();
  @#C1
  method forEach((core::String, core::String) → void f) → void
    return throw new core::UnimplementedError::•();
  @#C1
  method putIfAbsent(covariant-by-class core::String key, covariant-by-class () → core::String ifAbsent) → core::String
    return throw new core::UnimplementedError::•();
  @#C1
  method updateAll(covariant-by-class (core::String, core::String) → core::String update) → void
    return throw new core::UnimplementedError::•();
  @#C1
  method removeWhere((core::String, core::String) → core::bool predicate) → void
    return throw new core::UnimplementedError::•();
  method update(covariant-by-class core::String key, covariant-by-class (core::String) → core::String update, {covariant-by-class () →? core::String ifAbsent = #C2}) → core::String
    return throw new core::UnimplementedError::•();
  method map<K2 extends core::Object? = dynamic, V2 extends core::Object? = dynamic>((core::String, core::String) → core::MapEntry<self::CustomMap::map::K2%, self::CustomMap::map::V2%> f) → core::Map<self::CustomMap::map::K2%, self::CustomMap::map::V2%>
    return throw new core::UnimplementedError::•();
}
static const field core::int fortyTwo = #C3;
static const field dynamic fortyTwoAsDynamic = #C3;
static const field core::List<core::String>? nullList = #C2;
static const field core::List<core::String> foo = #C6;
static const field core::List<core::String> bar = #C8;
static field core::List<core::String> barAsVar = block {
  final core::List<core::String> #t1 = core::List::of<core::String>(#C6);
  #t1.{core::List::add}{Invariant}("!"){(core::String) → void};
} =>#t1;
static const field core::List<core::String> barWithNullSpread = #C6;
static const field core::List<core::String> barWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:23:51: Error: Unexpected type 'int' of a spread.  Expected 'dynamic' or an Iterable.
const List<String> barWithIntSpread = [...foo, ...fortyTwo];
                                                  ^";
static const field core::List<core::String> barWithIntDynamicSpread = invalid-expression "Expected constant '42' to be of type 'Iterable<dynamic>', but was of type 'int'.
 - 'Iterable' is from 'dart:core'.";
static const field core::List<core::String> barWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:25:51: Error: Unexpected type 'Map<String, String>' of a spread.  Expected 'dynamic' or an Iterable.
 - 'Map' is from 'dart:core'.
const List<String> barWithMapSpread = [...foo, ...quux];
                                                  ^";
static const field core::List<core::String> barWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
static const field core::List<core::String> barWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
static const field self::CustomIterable customIterable = #C9;
static const field core::List<core::String> barWithCustomIterableSpread3 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
static const field core::List<core::String> listConcat = invalid-expression "The method '+' can't be invoked on '<String>[\"Hello\"]' in a constant expression.";
static const field core::Set<core::String>? nullSet = #C2;
static const field core::Set<core::String> baz = #C10;
static const field core::Set<core::String> qux = #C11;
static const field core::Set<core::String> quxWithNullSpread = #C10;
static const field core::Set<core::String> quxWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:41:50: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
const Set<String> quxWithIntSpread = {...baz, ...fortyTwo};
                                                 ^";
static const field core::Set<core::String> quxWithMapSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:42:38: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
const Set<String> quxWithMapSpread = {...baz, ...quux};
                                     ^";
static const field core::Set<core::String> quxWithCustomIterableSpread1 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
static const field core::Set<core::String> quxWithCustomIterableSpread2 = invalid-expression "Only lists and sets can be used in spreads in constant lists and sets.";
static const field core::Set<core::String> quxWithCustomIterableSpread3 = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:48:59: Error: A value of type 'CustomIterable' can't be assigned to a variable of type 'String'.
 - 'CustomIterable' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.
const Set<String> quxWithCustomIterableSpread3 = {...baz, customIterable};
                                                          ^";
static const field core::Set<dynamic> setWithNonPrimitiveEquals = invalid-expression "The element 'WithEquals {i: 42}' does not have a primitive operator '=='.
 - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Set<dynamic> setWithDuplicates = invalid-expression "The element '42' conflicts with another existing element in the set.";
static const field core::Map<core::String, core::String>? nullMap = #C2;
static const field core::Map<core::String, core::String> quux = #C12;
static const field core::Map<core::String, core::String> quuz = #C14;
static const field core::Map<core::String, core::String> quuzWithNullSpread = #C12;
static const field core::Map<core::String, core::String> quuzWithIntSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:58:60: Error: Unexpected type 'int' of a map spread entry.  Expected 'dynamic' or a Map.
const Map<String, String> quuzWithIntSpread = {...quux, ...fortyTwo};
                                                           ^";
static const field core::Map<core::String, core::String> quuzWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:59:47: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
const Map<String, String> quuzWithSetSpread = {...quux, ...baz};
                                              ^";
static const field core::Map<core::String, core::String> mapWithSetSpread = invalid-expression "pkg/front_end/testcases/general/constants/const_collections.dart:60:46: Error: Both Iterable and Map spread elements encountered in ambiguous literal.
const Map<String, String> mapWithSetSpread = {...baz};
                                             ^";
static const field core::Map<core::String, core::String> mapWithCustomMap1 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> mapWithCustomMap2 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<core::String, core::String> customMap = #C15;
static const field core::Map<core::String, core::String> mapWithCustomMap3 = invalid-expression "Only maps can be used in spreads in constant maps.";
static const field core::Map<dynamic, core::int> mapWithNonPrimitiveEqualsKey = invalid-expression "The key 'WithEquals {i: 42}' does not have a primitive operator '=='.
 - 'WithEquals' is from 'pkg/front_end/testcases/general/constants/const_collections.dart'.";
static const field core::Map<core::int, core::int> mapWithDuplicates = invalid-expression "The key '42' conflicts with another existing key in the map.";
static get fooAsGetter() → core::List<core::String>
  return #C6;
static get barAsGetter() → core::List<core::String>
  return #C8;
static get bazAsGetter() → core::Set<core::String>
  return #C10;
static get quxAsGetter() → core::Set<core::String>
  return #C11;
static get quuxAsGetter() → core::Map<core::String, core::String>
  return #C12;
static get quuzAsGetter() → core::Map<core::String, core::String>
  return #C14;
static method main() → dynamic {
  core::print(#C8);
  core::print(#C11);
  core::print(#C14);
  core::print( block {
    final core::Set<core::String> #t2 = new col::_CompactLinkedHashSet::•<core::String>();
    #t2.{core::Set::add}{Invariant}("hello"){(core::String) → core::bool};
  } =>#t2);
  core::print(#C16);
}

constants  {
  #C1 = core::_Override {}
  #C2 = null
  #C3 = 42
  #C4 = "hello"
  #C5 = "world"
  #C6 = <core::String*>[#C4, #C5]
  #C7 = "!"
  #C8 = <core::String*>[#C4, #C5, #C7]
  #C9 = self::CustomIterable {}
  #C10 = <core::String*>{#C4, #C5}
  #C11 = <core::String*>{#C4, #C5, #C7}
  #C12 = <core::String*, core::String*>{#C4:#C5)
  #C13 = "bye!"
  #C14 = <core::String*, core::String*>{#C4:#C5, #C7:#C13)
  #C15 = self::CustomMap {}
  #C16 = <core::String*>{#C4}
}


Constructor coverage from constants:
org-dartlang-testcase:///const_collections.dart:
- CustomIterable. (from org-dartlang-testcase:///const_collections.dart:79:9)
- IterableBase. (from org-dartlang-sdk:///sdk/lib/collection/iterable.dart:219:9)
- Iterable. (from org-dartlang-sdk:///sdk/lib/core/iterable.dart:87:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- WithEquals. (from org-dartlang-testcase:///const_collections.dart:72:9)
- CustomMap. (from org-dartlang-testcase:///const_collections.dart:84:9)
