library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
// const Map<bool> MapWithUnevaluated = {
//       ^
//
import self as self;
import "dart:core" as core;

static const field core::List<core::bool> listWithUnevaluated = #C5;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C8;
static const field core::Set<core::bool> setWithUnevaluated = #C10;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C12;
static const field core::List<core::int> a = #C13;
static const field core::List<core::int?> b = #C14;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C15;
static const field invalid-type MapWithUnevaluated = #C16;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C19;
static method main() → dynamic {
  core::print(#C20);
  core::print(#C21);
  core::print(#C22);
  core::print(#C23);
  core::print(<core::String>{"hello"});
  core::print(#C25);
}

constants  {
  #C1 = "foo"
  #C2 = "bar"
  #C3 = true
  #C4 = <core::bool*>[#C3]
  #C5 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
  #C6 = false
  #C7 = <core::bool*>[#C6]
  #C8 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
  #C9 = <core::bool*>{#C3}
  #C10 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
  #C11 = <core::bool*>{#C6}
  #C12 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
  #C13 = <core::int*>[]
  #C14 = <core::int?>[]
  #C15 = <core::List<core::int?>*>{#C13, #C14}
  #C16 = eval const <dynamic, dynamic>{const core::bool::fromEnvironment(#C1): const core::bool::fromEnvironment(#C2)}
  #C17 = 0
  #C18 = 1
  #C19 = <core::List<core::int?>*, core::int*>{#C13:#C17, #C14:#C18)
  #C20 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
  #C21 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
  #C22 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
  #C23 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
  #C24 = "hello"
  #C25 = <core::String*>{#C24}
}

Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:5:40 -> ListConstant(const <bool*>[false, false, true])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true, false, false, true, false])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:5:40 -> ListConstant(const <bool*>[false, false, true])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true, false, false, true, false])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:27:38 -> MapConstant(const <bool*, bool*>{false: false})
Extra constant evaluation: evaluated: 16, effectively constant: 5
