library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
//   const Foo.withInvalidCondition(this.x) : assert(x);
//                                                   ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:26:24: Error: Constant evaluation error:
// const Foo foo2 = const Foo(0);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:8:18: Context: This assertion failed with message: x is not positive
//       : assert(x > 0, "x is not positive"),
//                  ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:26:11: Context: While analyzing:
// const Foo foo2 = const Foo(0);
//           ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:28:24: Error: Constant evaluation error:
// const Foo foo4 = const Foo.withInvalidMessage(42);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:15:56: Context: Expected constant '42' to be of type 'String', but was of type 'int'.
//   const Foo.withInvalidMessage(this.x) : assert(x < 0, x);
//                                                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:28:11: Context: While analyzing:
// const Foo foo4 = const Foo.withInvalidMessage(42);
//           ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:30:24: Error: Constant evaluation error:
// const Bar bar1 = const Bar.withMessage(1);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:21:44: Context: This assertion failed with message: x is not negative
//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
//                                            ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:30:11: Context: While analyzing:
// const Bar bar1 = const Bar.withMessage(1);
//           ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:31:24: Error: Constant evaluation error:
// const Bar bar2 = const Bar.withMessage(0);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:21:44: Context: This assertion failed with message: x is not negative
//   const Bar.withMessage(this.x) : assert(x < 0, "x is not negative");
//                                            ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:31:11: Context: While analyzing:
// const Bar bar2 = const Bar.withMessage(0);
//           ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:32:24: Error: Constant evaluation error:
// const Bar bar3 = const Bar.withoutMessage(1);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:22:47: Context: This assertion failed.
//   const Bar.withoutMessage(this.x) : assert(x < 0);
//                                               ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:32:11: Context: While analyzing:
// const Bar bar3 = const Bar.withoutMessage(1);
//           ^
//
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:33:24: Error: Constant evaluation error:
// const Bar bar4 = const Bar.withoutMessage(0);
//                        ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:22:47: Context: This assertion failed.
//   const Bar.withoutMessage(this.x) : assert(x < 0);
//                                               ^
// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:33:11: Context: While analyzing:
// const Bar bar4 = const Bar.withoutMessage(0);
//           ^
//
import self as self;
import "dart:core" as core;

class Foo extends core::Object /*hasConstConstructor*/  {
  final field core::int x;
  const constructor •(core::int x) → self::Foo
    : self::Foo::x = x, assert(x.{core::num::>}(0){(core::num) → core::bool}, "x is not positive"), assert(x.{core::num::>}(0){(core::num) → core::bool}), assert(#C2 =={core::Object::==}{(core::Object) → core::bool} false, "foo was ${#C3}"), assert(#C4 =={core::Object::==}{(core::Object) → core::bool} false), super core::Object::•()
    ;
  const constructor withMessage(core::int x) → self::Foo
    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "btw foo was ${#C5}"), super core::Object::•()
    ;
  const constructor withInvalidMessage(core::int x) → self::Foo
    : self::Foo::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, x), super core::Object::•()
    ;
  const constructor withInvalidCondition(core::int x) → self::Foo
    : self::Foo::x = x, assert(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
  const Foo.withInvalidCondition(this.x) : assert(x);
                                                  ^" in x as{TypeError,ForNonNullableByDefault} core::bool), super core::Object::•()
    ;
}
class Bar extends core::Object /*hasConstConstructor*/  {
  final field core::int x;
  const constructor withMessage(core::int x) → self::Bar
    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}, "x is not negative"), super core::Object::•()
    ;
  const constructor withoutMessage(core::int x) → self::Bar
    : self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
    ;
}
static const field self::Foo foo1 = #C9;
static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
static const field self::Foo foo3 = #C12;
static const field self::Foo foo4 = invalid-expression "Expected constant '42' to be of type 'String', but was of type 'int'.";
static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
  const Foo.withInvalidCondition(this.x) : assert(x);
                                                  ^";
static const field self::Bar bar1 = invalid-expression "This assertion failed with message: x is not negative";
static const field self::Bar bar2 = invalid-expression "This assertion failed with message: x is not negative";
static const field self::Bar bar3 = invalid-expression "This assertion failed.";
static const field self::Bar bar4 = invalid-expression "This assertion failed.";
static method main() → dynamic {
  core::print(#C13);
}

constants  {
  #C1 = "foo"
  #C2 = eval const core::bool::fromEnvironment(#C1)
  #C3 = eval const core::bool::fromEnvironment(#C1)
  #C4 = eval const core::bool::fromEnvironment(#C1)
  #C5 = eval const core::bool::fromEnvironment(#C1)
  #C6 = 1
  #C7 = false
  #C8 = "foo was "
  #C9 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
  #C10 = 42
  #C11 = "btw foo was "
  #C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
  #C13 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
}

Extra constant evaluation status:
Evaluated with empty environment: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:10:50 -> BoolConstant(true)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:10:22 -> BoolConstant(false)
Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:11:59 -> StringConstant("foo was false")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:11:30 -> BoolConstant(false)
Evaluated with empty environment: EqualsCall @ org-dartlang-testcase:///const_asserts.dart:12:50 -> BoolConstant(true)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:12:22 -> BoolConstant(false)
Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:14:73 -> StringConstant("btw foo was false")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:14:44 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
Extra constant evaluation: evaluated: 31, effectively constant: 10


Constructor coverage from constants:
org-dartlang-testcase:///const_asserts.dart:
- Foo. (from org-dartlang-testcase:///const_asserts.dart:7:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Foo.withMessage (from org-dartlang-testcase:///const_asserts.dart:13:9)
- Foo.withInvalidMessage (from org-dartlang-testcase:///const_asserts.dart:15:9)
- Foo.withInvalidCondition (from org-dartlang-testcase:///const_asserts.dart:16:9)
- Bar.withMessage (from org-dartlang-testcase:///const_asserts.dart:21:9)
- Bar.withoutMessage (from org-dartlang-testcase:///const_asserts.dart:22:9)
