library;
import self as self;
import "dart:core" as core;

static const field core::bool* y = false;
static const field core::bool* z = !self::y;
static const field core::Object* maybeInt = self::z ?{core::Object*} 42 : true;
static const field core::bool* isItInt = self::maybeInt is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble = self::maybeInt is core::double* ?{core::bool*} true : false;
static const field core::int* actualInt = 42;
static const field core::bool* isItInt2 = self::actualInt is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble2 = self::actualInt is core::double* ?{core::bool*} true : false;
static const field core::Object* maybeDouble = self::z ?{core::Object*} 42.0 : true;
static const field core::bool* isItInt3 = self::maybeDouble is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble3 = self::maybeDouble is core::double* ?{core::bool*} true : false;
static const field core::double* actualDouble = 42.0;
static const field core::bool* isItInt4 = self::actualDouble is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble4 = self::actualDouble is core::double* ?{core::bool*} true : false;
static const field core::Object* maybeDouble2 = self::z ?{core::Object*} 42.42 : true;
static const field core::bool* isItInt5 = self::maybeDouble2 is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble5 = self::maybeDouble2 is core::double* ?{core::bool*} true : false;
static const field core::double* actualDouble2 = 42.42;
static const field core::bool* isItInt6 = self::actualDouble2 is core::int* ?{core::bool*} true : false;
static const field core::bool* isItDouble7 = self::actualDouble2 is core::double* ?{core::bool*} true : false;
static const field core::bool* zeroPointZeroIdentical = core::identical(0.0, 0.0);
static const field core::bool* zeroPointZeroIdenticalToZero = core::identical(0.0, 0);
static const field core::bool* zeroIdenticalToZeroPointZero = core::identical(0, 0.0);
static const field core::bool* nanIdentical = core::identical(0.{core::num::/}(0){(core::num) →* core::double*}, 0.{core::num::/}(0){(core::num) →* core::double*});
static const field core::bool* stringIdentical = core::identical("hello", "hello");
static const field core::bool* string2Identical = core::identical("hello", "world");
static const field core::bool* zeroPointZeroEqual = 0.0 =={core::num::==}{(core::Object) → core::bool} 0.0;
static const field core::bool* zeroPointZeroEqualToZero = 0.0 =={core::num::==}{(core::Object) → core::bool} 0;
static const field core::bool* zeroEqualToZeroPointZero = 0 =={core::num::==}{(core::Object) → core::bool} 0.0;
static const field core::bool* nanEqual = 0.{core::num::/}(0){(core::num) →* core::double*} =={core::num::==}{(core::Object) → core::bool} 0.{core::num::/}(0){(core::num) →* core::double*};
static const field core::bool* stringEqual = "hello" =={core::String::==}{(core::Object) → core::bool} "hello";
static const field core::bool* string2Equal = "hello" =={core::String::==}{(core::Object) → core::bool} "world";
static const field core::int* intFortyTwo = 42;
static const field core::String* intStringConcat = "hello${self::intFortyTwo.{core::num::*}(self::intFortyTwo){(core::num) →* core::int*}}";


Extra constant evaluation status:
Evaluated: Not @ org-dartlang-testcase:///various.dart:6:16 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:8:20 -> DoubleConstant(42.0)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:9:38 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:10:44 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:13:40 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:14:46 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:16:23 -> DoubleConstant(42.0)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:17:42 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:18:48 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:21:43 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:22:49 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:24:24 -> DoubleConstant(42.42)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:25:43 -> BoolConstant(false)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:26:49 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:29:44 -> BoolConstant(false)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:30:50 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:32:32 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:33:38 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:34:38 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:35:22 -> BoolConstant(false)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:36:25 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various.dart:37:26 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:39:32 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:40:38 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:41:36 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:42:24 -> BoolConstant(false)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:43:29 -> BoolConstant(true)
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:44:30 -> BoolConstant(false)
Evaluated: StringConcatenation @ org-dartlang-testcase:///various.dart:47:30 -> StringConstant("hello1764")
Extra constant evaluation: evaluated: 29, effectively constant: 29
