library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/various.dart:178:3: Error: A const constructor can't have a body.
// Try removing either the 'const' keyword or the body.
//   const ClassWithNonEmptyConstConstructor() {
//   ^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
// const x1 = --x;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
// const x2 = ++x;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
// const x3 = x--;
//            ^
//
// pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
// const x4 = x++;
//            ^
//
// pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
// const y1 = --y;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
// const y2 = ++y;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
// const y3 = y--;
//            ^
//
// pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
// const y4 = y++;
//            ^
//
// pkg/front_end/testcases/general/constants/various.dart:156:24: Error: Not a constant expression.
// const function_const = () {};
//                        ^^
//
// pkg/front_end/testcases/general/constants/various.dart:196:14: Error: Can't access 'this' in a field initializer to read 'y'.
//   final z1 = y;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
// const bool.fromEnvironment("bar", defaultValue: null);
//                                                 ^
//
// pkg/front_end/testcases/general/constants/various.dart:25:51: Error: The argument type 'Null' can't be assigned to the parameter type 'String'.
// const String.fromEnvironment("bar", defaultValue: null);
//                                                   ^
//
// pkg/front_end/testcases/general/constants/various.dart:33:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
// const bool.fromEnvironment("bar", defaultValue: null);
//                                                 ^
//
// pkg/front_end/testcases/general/constants/various.dart:40:48: Error: The argument type 'Null' can't be assigned to the parameter type 'int'.
// const int.fromEnvironment("bar", defaultValue: null);
//                                                ^
//
// pkg/front_end/testcases/general/constants/various.dart:99:4: Error: The class 'AbstractClass' is abstract and can't be instantiated.
//   @AbstractClass()
//    ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:102:4: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
//   @AbstractClassWithConstructor()
//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:128:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
//                                       ^^^^^^^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:131:9: Error: The implicitly called unnamed constructor from 'Foo' has required parameters.
// Try adding an explicit super initializer with the required arguments.
//   const ExtendsFoo2();
//         ^
//
// pkg/front_end/testcases/general/constants/various.dart:196:14: Error: Not a constant expression.
//   final z1 = y;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:197:14: Error: Not a constant expression.
//   final z2 = x;
//              ^
//
// pkg/front_end/testcases/general/constants/various.dart:96:7: Error: The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.
// const AbstractClassWithConstructor();
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:184:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
// Try using a constructor or factory that is 'const'.
// const ClassWithNonEmptyConstConstructor();
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/constants/various.dart:100:10: Error: Field 'foo' should be initialized because its type 'Object' doesn't allow null.
//  - 'Object' is from 'dart:core'.
//   Object foo;
//          ^^^
//
// pkg/front_end/testcases/general/constants/various.dart:103:10: Error: Field 'bar' should be initialized because its type 'Object' doesn't allow null.
//  - 'Object' is from 'dart:core'.
//   Object bar;
//          ^^^
//
// pkg/front_end/testcases/general/constants/various.dart:124:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
// class ExtendsFoo1 extends Foo {
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:64:37: Error: Constant evaluation error:
// const binaryOnDouble = willBeDouble << 2;
//                                     ^
// pkg/front_end/testcases/general/constants/various.dart:64:37: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
// const binaryOnDouble = willBeDouble << 2;
//                                     ^
// pkg/front_end/testcases/general/constants/various.dart:64:7: Context: While analyzing:
// const binaryOnDouble = willBeDouble << 2;
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:66:44: Error: Constant evaluation error:
// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
//                                            ^
// pkg/front_end/testcases/general/constants/various.dart:66:44: Context: Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.
// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
//                                            ^
// pkg/front_end/testcases/general/constants/various.dart:66:7: Context: While analyzing:
// const binaryOnIntWithDoubleBad = willBeInt << willBeDouble;
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:68:41: Error: Constant evaluation error:
// const binaryOnIntWithString = willBeInt << "hello";
//                                         ^
// pkg/front_end/testcases/general/constants/various.dart:68:41: Context: Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.
// const binaryOnIntWithString = willBeInt << "hello";
//                                         ^
// pkg/front_end/testcases/general/constants/various.dart:68:7: Context: While analyzing:
// const binaryOnIntWithString = willBeInt << "hello";
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:72:44: Error: Constant evaluation error:
// const binaryOnStringWithInt = willBeString + willBeInt;
//                                            ^
// pkg/front_end/testcases/general/constants/various.dart:72:44: Context: Binary operator '+' on '"hello"' requires operand of type 'String', but was of type 'int'.
// const binaryOnStringWithInt = willBeString + willBeInt;
//                                            ^
// pkg/front_end/testcases/general/constants/various.dart:72:7: Context: While analyzing:
// const binaryOnStringWithInt = willBeString + willBeInt;
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:73:50: Error: Constant evaluation error:
// const binaryOnStringWithStringBad = willBeString - " world";
//                                                  ^
// pkg/front_end/testcases/general/constants/various.dart:73:50: Context: The method '-' can't be invoked on '"hello"' in a constant expression.
// const binaryOnStringWithStringBad = willBeString - " world";
//                                                  ^
// pkg/front_end/testcases/general/constants/various.dart:73:7: Context: While analyzing:
// const binaryOnStringWithStringBad = willBeString - " world";
//       ^
//
// pkg/front_end/testcases/general/constants/various.dart:144:62: Error: Constant evaluation error:
// const bool fooWithHashCodeFieldEqual = fooWithHashCodeField1 == fooWithHashCodeField2;
//                                                              ^
// pkg/front_end/testcases/general/constants/various.dart:144:62: Context: Binary operator '==' requires receiver constant 'FooWithHashCodeField {x: 42, y: 5, hashCode: 1764}' of a type with primitive equality or type 'double', but was of type 'FooWithHashCodeField'.
//  - 'FooWithHashCodeField' is from 'pkg/front_end/testcases/general/constants/various.dart'.
// const bool fooWithHashCodeFieldEqual = fooWithHashCodeField1 == fooWithHashCodeField2;
//                                                              ^
// pkg/front_end/testcases/general/constants/various.dart:144:12: Context: While analyzing:
// const bool fooWithHashCodeFieldEqual = fooWithHashCodeField1 == fooWithHashCodeField2;
//            ^
//
// pkg/front_end/testcases/general/constants/various.dart:151:26: Error: Constant evaluation error:
// const int circularity1 = circularity2;
//                          ^
// pkg/front_end/testcases/general/constants/various.dart:151:26: Context: Constant expression depends on itself.
// const int circularity1 = circularity2;
//                          ^
// pkg/front_end/testcases/general/constants/various.dart:151:11: Context: While analyzing:
// const int circularity1 = circularity2;
//           ^
//
// pkg/front_end/testcases/general/constants/various.dart:164:7: Error: Constant evaluation error:
// const ConstClassWithFailingAssertWithEmptyMessage();
//       ^
// pkg/front_end/testcases/general/constants/various.dart:160:64: Context: This assertion failed with message: (empty)
//   const ConstClassWithFailingAssertWithEmptyMessage() : assert(false, "");
//                                                                ^
//
// pkg/front_end/testcases/general/constants/various.dart:219:35: Error: Constant evaluation error:
// const bool.fromEnvironment("foo") ? id1 : willBecomeNull;
//                                   ^
// pkg/front_end/testcases/general/constants/various.dart:219:35: Context: Expected constant 'null' to be of type 'int Function(int)', but was of type 'Null'.
// const bool.fromEnvironment("foo") ? id1 : willBecomeNull;
//                                   ^
// pkg/front_end/testcases/general/constants/various.dart:218:25: Context: While analyzing:
// const int Function(int) willBecomeNullToo =
//                         ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

abstract class AbstractClass extends core::Object {
  synthetic constructor •() → self::AbstractClass
    : super core::Object::•()
    ;
}
abstract class AbstractClassWithConstructor extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::AbstractClassWithConstructor
    : super core::Object::•()
    ;
  abstract method foo() → core::int;
}
class NotAbstractClass extends core::Object {
  @invalid-expression "The class 'AbstractClass' is abstract and can't be instantiated."
  field core::Object foo = null;
  @invalid-expression "The class 'AbstractClassWithConstructor' is abstract and can't be instantiated."
  field core::Object bar = null;
  synthetic constructor •() → self::NotAbstractClass
    : super core::Object::•()
    ;
}
class Foo extends core::Object /*hasConstConstructor*/  {
  final field core::int x;
  final field core::int y;
  const constructor •(core::int x) → self::Foo
    : self::Foo::x = x, self::Foo::y = "hello".{core::String::length}{core::int}, super core::Object::•()
    ;
}
class FooWithHashCodeField extends core::Object /*hasConstConstructor*/  {
  final field core::int x;
  final field core::int y;
  final field core::int hashCode;
  const constructor •(core::int x) → self::FooWithHashCodeField
    : self::FooWithHashCodeField::x = x, self::FooWithHashCodeField::y = "hello".{core::String::length}{core::int}, self::FooWithHashCodeField::hashCode = x.{core::num::*}(42){(core::num) → core::int}, super core::Object::•()
    ;
}
class ExtendsFoo1 extends self::Foo {
  synthetic constructor •() → self::ExtendsFoo1
    : invalid-initializer
    ;
}
class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
  const constructor •() → self::ExtendsFoo2
    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:131:9: Error: The implicitly called unnamed constructor from 'Foo' has required parameters.
Try adding an explicit super initializer with the required arguments.
  const ExtendsFoo2();
        ^"
    ;
}
class ConstClassWithFailingAssertWithEmptyMessage extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::ConstClassWithFailingAssertWithEmptyMessage
    : assert(false, ""), super core::Object::•()
    ;
}
class ClassWithTypeArguments<E extends core::Object? = dynamic, F extends core::Object? = dynamic, G extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •(self::ClassWithTypeArguments::E% e, self::ClassWithTypeArguments::F% f, self::ClassWithTypeArguments::G% g) → self::ClassWithTypeArguments<self::ClassWithTypeArguments::E%, self::ClassWithTypeArguments::F%, self::ClassWithTypeArguments::G%>
    : super core::Object::•()
    ;
}
class ClassWithNonEmptyConstConstructor extends core::Object {
  constructor •() → self::ClassWithNonEmptyConstConstructor
    : super core::Object::•() {
    core::print("hello");
  }
}
class ConstClassWithFinalFields1 extends core::Object /*hasConstConstructor*/  {
  final field core::int x = 1;
  const constructor •() → self::ConstClassWithFinalFields1
    : super core::Object::•()
    ;
}
class ConstClassWithFinalFields2 extends core::Object /*hasConstConstructor*/  {
  final field core::int y = 1;
  final field invalid-type z1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:196:14: Error: Not a constant expression.
  final z1 = y;
             ^";
  final field core::int z2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:197:14: Error: Not a constant expression.
  final z2 = x;
             ^";
  const constructor •() → self::ConstClassWithFinalFields2
    : super core::Object::•()
    ;
}
static const field core::bool barFromEnv = #C1;
static const field core::bool hasBarEnv = #C1;
static const field core::bool barFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool notBarFromEnvOrNull = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool conditionalOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool nullAwareOnNullTrue = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool nullAwareOnNullFalse = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool andOnFalse = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool andOnFalse2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool andOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool andOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool orOnNull = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool orOnNull2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool orOnNull3 = #C2;
static const field core::bool orOnNull4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:9:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::String barFromEnvString = #C3;
static const field core::String barFromEnvOrNullString = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:25:51: Error: The argument type 'Null' can't be assigned to the parameter type 'String'.
const String.fromEnvironment(\"bar\", defaultValue: null);
                                                  ^";
static const field core::String barFromEnvOrActualString = #C4;
static const field core::String nullFromEnvString = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:25:51: Error: The argument type 'Null' can't be assigned to the parameter type 'String'.
const String.fromEnvironment(\"bar\", defaultValue: null);
                                                  ^";
static const field core::bool barFromEnvBool = #C1;
static const field core::bool barFromEnvOrNullBool = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:33:49: Error: The argument type 'Null' can't be assigned to the parameter type 'bool'.
const bool.fromEnvironment(\"bar\", defaultValue: null);
                                                ^";
static const field core::bool barFromEnvOrActualBool = #C2;
static const field core::bool nullFromEnvBool = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:25:51: Error: The argument type 'Null' can't be assigned to the parameter type 'String'.
const String.fromEnvironment(\"bar\", defaultValue: null);
                                                  ^";
static const field core::int barFromEnvInt = #C5;
static const field core::int barFromEnvOrNullInt = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:40:48: Error: The argument type 'Null' can't be assigned to the parameter type 'int'.
const int.fromEnvironment(\"bar\", defaultValue: null);
                                               ^";
static const field core::int barFromEnvOrActualInt = #C6;
static const field core::int nullFromEnvInt = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:25:51: Error: The argument type 'Null' can't be assigned to the parameter type 'String'.
const String.fromEnvironment(\"bar\", defaultValue: null);
                                                  ^";
static const field core::bool bazFromEnv = #C1;
static const field core::bool hasBazEnv = #C2;
static const field core::int bazFromEnvAsInt = #C6;
static const field core::String bazFromEnvAsString = #C7;
static const field core::bool bazTrueFromEnv = #C2;
static const field core::bool bazFalseFromEnv = #C1;
static const field core::bool trueBool = #C2;
static const field core::bool falseBool = #C1;
static const field core::bool binaryOnBoolCaret = #C2;
static const field core::bool binaryOnBoolAmpersand = #C1;
static const field core::bool binaryOnBoolBar = #C2;
static const field core::bool binaryOnBoolBar2 = #C2;
static const field dynamic willBeDouble = #C8;
static const field dynamic binaryOnDouble = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
static const field dynamic willBeInt = #C6;
static const field dynamic binaryOnIntWithDoubleBad = invalid-expression "Binary operator '<<' on '42.42' requires operand of type 'int', but was of type 'double'.";
static const field dynamic binaryOnIntWithDoubleOK = #C9;
static const field dynamic binaryOnIntWithString = invalid-expression "Binary operator '<<' on '42' requires operand of type 'num', but was of type 'String'.";
static const field dynamic willBeString = #C4;
static const field dynamic binaryOnStringWithStringOK = #C10;
static const field dynamic binaryOnStringWithInt = invalid-expression "Binary operator '+' on '\"hello\"' requires operand of type 'String', but was of type 'int'.";
static const field dynamic binaryOnStringWithStringBad = invalid-expression "The method '-' can't be invoked on '\"hello\"' in a constant expression.";
static field core::int x = 1;
static const field invalid-type x1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:76:14: Error: Not a constant expression.
const x1 = --x;
             ^";
static const field invalid-type x2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:77:14: Error: Not a constant expression.
const x2 = ++x;
             ^";
static const field invalid-type x3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:78:12: Error: Not a constant expression.
const x3 = x--;
           ^";
static const field invalid-type x4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:79:12: Error: Not a constant expression.
const x4 = x++;
           ^";
static const field core::int y = #C11;
static const field invalid-type y1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:82:14: Error: Setter not found: 'y'.
const y1 = --y;
             ^";
static const field invalid-type y2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:83:14: Error: Setter not found: 'y'.
const y2 = ++y;
             ^";
static const field core::int y3 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:84:12: Error: Setter not found: 'y'.
const y3 = y--;
           ^";
static const field core::int y4 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:85:12: Error: Setter not found: 'y'.
const y4 = y++;
           ^";
static field self::AbstractClassWithConstructor abstractClassWithConstructor = invalid-expression "The class 'AbstractClassWithConstructor' is abstract and can't be instantiated.";
static const field self::ExtendsFoo1 extendsFoo1 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:128:39: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const ExtendsFoo1 extendsFoo1 = const ExtendsFoo1();
                                      ^^^^^^^^^^^";
static const field self::ExtendsFoo2 extendsFoo2 = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:131:9: Error: The implicitly called unnamed constructor from 'Foo' has required parameters.
Try adding an explicit super initializer with the required arguments.
  const ExtendsFoo2();
        ^";
static const field self::Foo foo1 = #C13;
static const field self::Foo foo2 = #C13;
static const field core::bool foosIdentical = #C2;
static const field core::bool foosEqual = #C2;
static const field self::FooWithHashCodeField fooWithHashCodeField1 = #C15;
static const field self::FooWithHashCodeField fooWithHashCodeField2 = #C15;
static const field core::bool fooWithHashCodeFieldIdentical = #C2;
static const field core::bool fooWithHashCodeFieldEqual = invalid-expression "Binary operator '==' requires receiver constant 'FooWithHashCodeField {x: 42, y: 5, hashCode: 1764}' of a type with primitive equality or type 'double', but was of type 'FooWithHashCodeField'.
 - 'FooWithHashCodeField' is from 'pkg/front_end/testcases/general/constants/various.dart'.";
static const field core::Symbol barFoo = #C16;
static const field core::Symbol barFooEqual = #C17;
static const field core::Symbol tripleShiftSymbol = #C18;
static const field core::Symbol symbolWithDots = #C19;
static const field core::int circularity1 = invalid-expression "Constant expression depends on itself.";
static const field core::int circularity2 = invalid-expression "Constant expression depends on itself.";
static const field core::int circularity3 = invalid-expression "Constant expression depends on itself.";
static const field core::int circularity4 = invalid-expression "Constant expression depends on itself.";
static const field invalid-type function_const = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:156:24: Error: Not a constant expression.
const function_const = () {};
                       ^^";
static field () → Null function_var = () → Null {};
static field self::ConstClassWithFailingAssertWithEmptyMessage failedAssertEmptyMessage = invalid-expression "This assertion failed with message: (empty)";
static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments1 = #C20;
static const field self::ClassWithTypeArguments<dynamic, dynamic, dynamic> classWithTypeArguments2 = #C21;
static const field core::bool classWithTypeArgumentsIdentical = #C1;
static field self::ClassWithNonEmptyConstConstructor classWithNonEmptyConstConstructor = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:184:7: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.
const ClassWithNonEmptyConstConstructor();
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
static field self::ConstClassWithFinalFields2 constClassWithFinalFields = invalid-expression "pkg/front_end/testcases/general/constants/various.dart:196:14: Error: Not a constant expression.
  final z1 = y;
             ^";
static const field core::bool zeroPointZeroIdentical = #C2;
static const field core::bool zeroPointZeroIdenticalToZero = #C1;
static const field core::bool zeroIdenticalToZeroPointZero = #C1;
static const field core::bool nanIdentical = #C2;
static const field core::bool zeroPointZeroEqual = #C2;
static const field core::bool zeroPointZeroEqualToZero = #C2;
static const field core::bool zeroEqualToZeroPointZero = #C2;
static const field core::bool nanEqual = #C1;
static const field dynamic willBecomeNull = #C22;
static const field (core::int) → core::int willBecomeNullToo = invalid-expression "Expected constant 'null' to be of type 'int Function(int)', but was of type 'Null'.";
static const field (core::int) → core::int partialInstantiation = #C24;
static const field core::bool yBool = #C2;
static const field core::bool zBool = #C1;
static const field core::Object maybeInt = #C2;
static const field core::bool isItInt = #C1;
static const field core::Object maybeInt2 = #C2;
static const field core::bool isItInt2 = #C1;
static const field core::int? maybeInt3 = #C22;
static const field core::bool isItInt3 = #C1;
static method id1<T extends core::Object? = dynamic>(self::id1::T% t) → self::id1::T%
  return t;
static method id2<T extends core::Object? = dynamic>(self::id2::T% t) → self::id2::T%
  return t;
static method main() → dynamic {
  core::print(#C1);
  core::print(#C1);
}

constants  {
  #C1 = false
  #C2 = true
  #C3 = ""
  #C4 = "hello"
  #C5 = 0
  #C6 = 42
  #C7 = "42"
  #C8 = 42.42
  #C9 = 84.42
  #C10 = "hello world"
  #C11 = 1
  #C12 = 5
  #C13 = self::Foo {x:#C6, y:#C12}
  #C14 = 1764
  #C15 = self::FooWithHashCodeField {x:#C6, y:#C12, hashCode:#C14}
  #C16 = #Foo
  #C17 = #Foo=
  #C18 = #>>>
  #C19 = #I.Have.Dots
  #C20 = self::ClassWithTypeArguments<core::int, core::int, core::int> {}
  #C21 = self::ClassWithTypeArguments<dynamic, dynamic, dynamic> {}
  #C22 = null
  #C23 = static-tearoff self::id1
  #C24 = instantiation #C23 <core::int>
}


Constructor coverage from constants:
org-dartlang-testcase:///various.dart:
- ExtendsFoo2. (from org-dartlang-testcase:///various.dart:131:9)
- Foo. (from org-dartlang-testcase:///various.dart:109:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- FooWithHashCodeField. (from org-dartlang-testcase:///various.dart:118:9)
- ConstClassWithFailingAssertWithEmptyMessage. (from org-dartlang-testcase:///various.dart:160:9)
- ClassWithTypeArguments. (from org-dartlang-testcase:///various.dart:167:9)
- ConstClassWithFinalFields2. (from org-dartlang-testcase:///various.dart:193:9)
