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

class Ext extends core::Object /*hasConstConstructor*/  {
  final field core::String _;
  const constructor •() → self::Ext
    : assert(!(#C5 == null), "Must not be null"), self::Ext::_ = "OK", super core::Object::•()
    ;
  static method _#new#tearOff() → self::Ext
    return new self::Ext::•();
}
static const field core::String? maybe = #C5;
static method main() → void {
  self::Ext c = #C10;
  core::print(c);
}

constants  {
  #C1 = "not there"
  #C2 = eval /* from org-dartlang-testcase:///issue56803b.dart */ const core::bool::fromEnvironment(#C1)
  #C3 = "string"
  #C4 = null
  #C5 = eval /* from org-dartlang-testcase:///issue56803b.dart */ #C2 ?{core::String?} #C3 : #C4
  #C6 = "OK"
  #C7 = eval /* from org-dartlang-testcase:///issue56803b.dart */ #C5 == null
  #C8 = eval /* from org-dartlang-testcase:///issue56803b.dart */!#C7
  #C9 = "Must not be null"
  #C10 = eval /* from org-dartlang-testcase:///issue56803b.dart */ self::Ext{_:#C6, assert(#C8, #C9)}
}

Extra constant evaluation status:
Evaluated with empty environment: Not @ org-dartlang-testcase:///issue56803b.dart:11:22 -> BoolConstant(false)
Evaluated with empty environment: EqualsNull @ org-dartlang-testcase:///issue56803b.dart:11:22 -> BoolConstant(true)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue56803b.dart:11:16 -> NullConstant(null)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue56803b.dart:5:57 -> NullConstant(null)
Extra constant evaluation: evaluated: 8, effectively constant: 4


Constructor coverage from constants:
org-dartlang-testcase:///issue56803b.dart:
- Ext. (from org-dartlang-testcase:///issue56803b.dart:10:9)
- Object. (from org-dartlang-sdk:///lib/core/object.dart)
