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

import "dart:async";
import "org-dartlang-testcase:///constant_null_is_lib.dart";

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 = (#C1) is{ForNonNullableByDefault} core::List<core::Object>;
static const field core::bool c0 = #C2;
static const field core::bool c1 = #C3;
static const field core::bool c2 = #C2;
static const field core::bool c3 = #C2;
static const field core::bool c4 = #C3;
static const field core::bool c5 = #C2;
static const field core::bool c6 = #C3;
static const field core::bool c7 = #C2;
static const field core::bool c8 = #C2;
static const field core::bool c9 = #C2;
static const field core::bool c10 = #C3;
static const field core::bool c11 = #C2;
static const field core::bool c12 = #C2;
static const field self::Class<core::int> e1 = #C4;
static const field self::Class<core::int?> e2 = #C4;
static const field self::Class<Null> e3 = #C5;
static const field self::Class<core::int> e4 = #C6;
static const field self::Class<core::int?> e5 = #C6;
static const field self::Class<Null> e6 = #C5;
static const field self::Class<core::int> e7 = #C4;
static const field self::Class<core::int?> e8 = #C4;
static const field self::Class<Null> e9 = #C7;
static const field self::Class<core::int> e10 = #C6;
static const field self::Class<core::int?> e11 = #C6;
static const field self::Class<Null> e12 = #C5;
static method main() → dynamic {
  self::expect(null is{ForNonNullableByDefault} core::int?, #C2, "null is int?");
  self::expect(null is{ForNonNullableByDefault} core::int, #C3, "null is int");
  self::expect(null is{ForNonNullableByDefault} Null, #C2, "null is Null");
  self::expect(null is{ForNonNullableByDefault} Never?, #C2, "null is Never?");
  self::expect(null is{ForNonNullableByDefault} Never, #C3, "null is Never");
  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int?>, #C2, "null is FutureOr<int?>");
  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>, #C3, "null is FutureOr<int>");
  self::expect(null is{ForNonNullableByDefault} FutureOr<core::int>?, #C2, "null is FutureOr<int>?");
  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>, #C2, "null is FutureOr<Null>");
  self::expect(null is{ForNonNullableByDefault} FutureOr<Null>?, #C2, "null is FutureOr<Null>?");
  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>, #C3, "null is FutureOr<Never>");
  self::expect(null is{ForNonNullableByDefault} FutureOr<Never?>, #C2, "null is FutureOr<Never?>");
  self::expect(null is{ForNonNullableByDefault} FutureOr<Never>?, #C2, "null is FutureOr<Never>?");
  self::expect(new self::Class::constructor1<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field");
  self::expect(true, new self::Class::constructor1<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor1(null).field");
  self::expect(!self::isWeakMode, (#C4).{self::Class::field}, "const Class<int?>.constructor1(null).field");
  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor1(null).field");
  self::expect(new self::Class::constructor2<core::int>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int>.constructor2(null).field");
  self::expect(true, new self::Class::constructor2<core::int?>(null).{self::Class::field}, "new Class<int?>.constructor2(null).field");
  self::expect(new self::Class::constructor2<core::int?>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int?>.constructor2(null).field");
  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor2(null).field");
  self::expect(new self::Class::constructor3<core::int>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field");
  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int?>.constructor3(null).field");
  self::expect(new self::Class::constructor3<core::int?>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int?>.constructor3(null).field");
  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<Null>.constructor3(null).field");
  self::expect(new self::Class::constructor4<core::int>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int>.constructor4(null).field");
  self::expect(new self::Class::constructor4<core::int?>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int?>.constructor4(null).field");
  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor4(null).field");
  con::test();
}
static method expect(dynamic expected, dynamic actual, core::String message) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual} for ${message}";
}

library;
import self as con;
import "constant_null_is.dart" as self;
import "dart:core" as core;

import "dart:async";
import "org-dartlang-testcase:///constant_null_is.dart";

static const field core::bool* d0 = #C3;
static const field core::bool* d1 = #C2;
static const field self::Class<core::int*>* d4 = #C4;
static const field self::Class<Null>* d5 = #C5;
static const field self::Class<core::int*>* d6 = #C6;
static const field self::Class<Null>* d7 = #C5;
static const field self::Class<core::int*>* d8 = #C4;
static const field self::Class<Null>* d9 = #C7;
static const field self::Class<core::int*>* d10 = #C6;
static const field self::Class<Null>* d11 = #C5;
static method test() → dynamic {
  self::expect(null is core::int*, #C3, "null is int (opt-out)");
  self::expect(null is Null, #C2, "null is Null");
  self::expect(new self::Class::constructor1<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor1(null).field (opt-out)");
  self::expect(new self::Class::constructor1<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor1(null).field (opt-out)");
  self::expect(new self::Class::constructor2<core::int*>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int>.constructor2(null).field (opt-out)");
  self::expect(new self::Class::constructor2<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor2(null).field (opt-out)");
  self::expect(new self::Class::constructor3<core::int*>(null).{self::Class::field}, (#C4).{self::Class::field}, "Class<int>.constructor3(null).field (opt-out)");
  self::expect(new self::Class::constructor3<Null>(null).{self::Class::field}, (#C7).{self::Class::field}, "Class<Null>.constructor3(null).field (opt-out)");
  self::expect(new self::Class::constructor4<core::int*>(null).{self::Class::field}, (#C6).{self::Class::field}, "Class<int>.constructor4(null).field (opt-out)");
  self::expect(new self::Class::constructor4<Null>(null).{self::Class::field}, (#C5).{self::Class::field}, "Class<Null>.constructor4(null).field (opt-out)");
}

constants  {
  #C1 = <Null>[]
  #C2 = true
  #C3 = false
  #C4 = self::Class<core::int*> {field:#C3}
  #C5 = self::Class<Null> {field:#C2}
  #C6 = self::Class<core::int*> {field:#C2}
  #C7 = self::Class<Null> {field:#C3}
}

Extra constant evaluation status:
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:46:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:47:15 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:48:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:49:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:50:15 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:51:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:52:15 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:53:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:54:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:55:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:56:15 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:57:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:58:15 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is.dart:8:40 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is_lib.dart:24:15 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///constant_null_is_lib.dart:25:15 -> BoolConstant(true)
Extra constant evaluation: evaluated: 139, effectively constant: 16


Constructor coverage from constants:
org-dartlang-testcase:///constant_null_is.dart:
- Class.constructor1 (from org-dartlang-testcase:///constant_null_is.dart:39:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- Class.constructor2 (from org-dartlang-testcase:///constant_null_is.dart:40:9)
- Class.constructor3 (from org-dartlang-testcase:///constant_null_is.dart:41:9)
- Class.constructor4 (from org-dartlang-testcase:///constant_null_is.dart:42:9)

org-dartlang-testcase:///constant_null_is_lib.dart:
- Class.constructor1 (from org-dartlang-testcase:///constant_null_is.dart:39:9)
- Class.constructor2 (from org-dartlang-testcase:///constant_null_is.dart:40:9)
- Class.constructor3 (from org-dartlang-testcase:///constant_null_is.dart:41:9)
- Class.constructor4 (from org-dartlang-testcase:///constant_null_is.dart:42:9)
