library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

import "dart:async";

class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field core::bool field;
  const constructor constructor1(dynamic value) → self::Class<self::Class::T%>
    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
    ;
  const constructor constructor2(dynamic value) → self::Class<self::Class::T%>
    : self::Class::field = value is{ForNonNullableByDefault} self::Class::T?, super core::Object::•()
    ;
  const constructor constructor3(dynamic value) → self::Class<self::Class::T%>
    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>, super core::Object::•()
    ;
  const constructor constructor4(dynamic value) → self::Class<self::Class::T%>
    : self::Class::field = value is{ForNonNullableByDefault} self::Class<self::Class::T%>?, super core::Object::•()
    ;
}
static final field core::bool isWeakMode;
static const field core::bool c0 = null is{ForNonNullableByDefault} core::int?;
static const field core::bool c1 = null is{ForNonNullableByDefault} core::int;
static const field core::bool c2 = null is{ForNonNullableByDefault} core::Null?;
static const field core::bool c3 = null is{ForNonNullableByDefault} Never?;
static const field core::bool c4 = null is{ForNonNullableByDefault} Never;
static const field core::bool c5 = null is{ForNonNullableByDefault} FutureOr<core::int?>;
static const field core::bool c6 = null is{ForNonNullableByDefault} FutureOr<core::int>;
static const field core::bool c7 = null is{ForNonNullableByDefault} FutureOr<core::int>?;
static const field core::bool c8 = null is{ForNonNullableByDefault} FutureOr<core::Null?>;
static const field core::bool c9 = null is{ForNonNullableByDefault} FutureOr<core::Null?>?;
static const field core::bool c10 = null is{ForNonNullableByDefault} FutureOr<Never>;
static const field core::bool c11 = null is{ForNonNullableByDefault} FutureOr<Never?>;
static const field core::bool c12 = null is{ForNonNullableByDefault} FutureOr<Never>?;
static const field self::Class<core::int> e1 = const self::Class::constructor1<core::int>(null);
static const field self::Class<core::int?> e2 = const self::Class::constructor1<core::int?>(null);
static const field self::Class<core::Null?> e3 = const self::Class::constructor1<core::Null?>(null);
static const field self::Class<core::int> e4 = const self::Class::constructor2<core::int>(null);
static const field self::Class<core::int?> e5 = const self::Class::constructor2<core::int?>(null);
static const field self::Class<core::Null?> e6 = const self::Class::constructor2<core::Null?>(null);
static const field self::Class<core::int> e7 = const self::Class::constructor3<core::int>(null);
static const field self::Class<core::int?> e8 = const self::Class::constructor3<core::int?>(null);
static const field self::Class<core::Null?> e9 = const self::Class::constructor3<core::Null?>(null);
static const field self::Class<core::int> e10 = const self::Class::constructor4<core::int>(null);
static const field self::Class<core::int?> e11 = const self::Class::constructor4<core::int?>(null);
static const field self::Class<core::Null?> e12 = const self::Class::constructor4<core::Null?>(null);
static method main() → dynamic
  ;
static method expect(dynamic expected, dynamic actual, core::String message) → dynamic
  ;


Extra constant evaluation status:
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:9:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:10:17 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:11:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:12:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:13:17 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:14:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:15:17 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:16:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:17:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:18:17 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:19:18 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:20:18 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:21:18 -> BoolConstant(true)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:22:18 -> InstanceConstant(const Class<int>{Class.field: false})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:23:18 -> InstanceConstant(const Class<int?>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:24:18 -> InstanceConstant(const Class<Null?>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:25:18 -> InstanceConstant(const Class<int>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:26:18 -> InstanceConstant(const Class<int?>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:27:18 -> InstanceConstant(const Class<Null?>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:28:18 -> InstanceConstant(const Class<int>{Class.field: false})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:29:18 -> InstanceConstant(const Class<int?>{Class.field: false})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:30:18 -> InstanceConstant(const Class<Null?>{Class.field: false})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:31:19 -> InstanceConstant(const Class<int>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:32:19 -> InstanceConstant(const Class<int?>{Class.field: true})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constant_null_is.dart:33:19 -> InstanceConstant(const Class<Null?>{Class.field: true})
Extra constant evaluation: evaluated: 33, effectively constant: 25
