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::•()
    ;
  static method _#new#tearOff(core::int? _x) → self::C
    return new self::C::•(_x);
  @#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(this.{self::C::_x}{core::int?} as{Unchecked} 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:///lib/core/annotations.dart)
- Object. (from org-dartlang-sdk:///lib/core/object.dart)
