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

class C extends core::Object {
  final field core::int? _x;
  constructor •(core::int? _x) → self::C
    : self::C::_x = _x, super core::Object::•()
    ;
  @#C3
  method manual() → void {
    core::int? x = this.{self::C::_x}{core::int?};
    if(!(x == null))
      core::print(x{core::int});
    else
      core::print("null");
  }
  @#C3
  method pattern() → void {
    {
      final synthesized core::int? #0#0 = this.{self::C::_x}{core::int?};
      {
        hoisted core::int x;
        if(!(#0#0 == null)) {
          x = #0#0{core::int};
          core::print(x);
        }
        else
          core::print("null");
      }
    }
  }
  @#C3
  method promote() → void {
    if(!(this.{self::C::_x}{core::int?} == null))
      core::print(let core::int? #t1 = this.{self::C::_x}{core::int?} in #t1 == null ?{core::int} #t1 as{Unchecked} core::int : #t1{core::int});
    else
      core::print("null");
  }
}

constants  {
  #C1 = "dart2js:never-inline"
  #C2 = null
  #C3 = core::pragma {name:#C1, options:#C2}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue54115.dart:
- pragma._ (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
