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

class Class extends core::Object {
  field core::int field;
  constructor •(core::int field) → self::Class
    : self::Class::field = field, super core::Object::•()
    ;
}
extension Extension on self::Class {
  get property = self::Extension|get#property;
  get nullableProperty = self::Extension|get#nullableProperty;
  method method = self::Extension|method;
  method tearoff method = self::Extension|get#method;
  set property = self::Extension|set#property;
}
static extension-member method Extension|get#property(lowered final self::Class #this) → core::int
  return #this.{self::Class::field}{core::int};
static extension-member method Extension|get#nullableProperty(lowered final self::Class #this) → core::int?
  return #this.{self::Class::field}{core::int};
static extension-member method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
  #this.{self::Class::field} = let final core::int? #t1 = value in #t1 == null ?{core::int} 0 : #t1{core::int};
}
static extension-member method Extension|method(lowered final self::Class #this) → core::int
  return #this.{self::Class::field}{core::int};
static extension-member method Extension|get#method(lowered final self::Class #this) → () → core::int
  return () → core::int => self::Extension|method(#this);
static method main() → dynamic {
  self::test(null);
}
static get value() → core::int?
  return 42;
static method test(self::Class? c) → dynamic {
  let final core::int? #t2 = let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : self::Extension|get#property(#t3{self::Class}) in #t2 == null ?{core::int} 0 : #t2{core::int};
  let final core::int? #t4 = let final self::Class? #t5 = c in #t5 == null ?{core::int?} null : self::Extension|get#property(#t5{self::Class}) in #t4 == null ?{core::int} 0 : #t4{core::int};
  let final self::Class? #t6 = c in #t6 == null ?{void} null : self::Extension|set#property(#t6{self::Class}, let final core::int? #t7 = self::value in #t7 == null ?{core::int} 0 : #t7{core::int});
  let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : self::Extension|set#property(#t8{self::Class}, let final core::int? #t9 = self::value in #t9 == null ?{core::int} 0 : #t9{core::int});
  let final core::int? #t10 = let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final core::int #t12 = 42 in let final void #t13 = self::Extension|set#property(#t11{self::Class}, #t12) in #t12 in #t10 == null ?{core::int} 0 : #t10{core::int};
  let final core::int? #t14 = let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final core::int? #t16 = self::value in let final void #t17 = self::Extension|set#property(#t15{self::Class}, #t16) in #t16 in #t14 == null ?{core::int} 0 : #t14{core::int};
  let final core::int? #t18 = let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : self::Extension|method(#t19{self::Class}) in #t18 == null ?{core::int} 0 : #t18{core::int};
  let final core::int? #t20 = let final self::Class? #t21 = c in #t21 == null ?{core::int?} null : self::Extension|method(#t21{self::Class}) in #t20 == null ?{core::int} 0 : #t20{core::int};
  c = new self::Class::•(0);
  let final core::int? #t22 = self::Extension|get#nullableProperty(c{self::Class}) in #t22 == null ?{core::int} 0 : #t22{core::int};
  let final core::int? #t23 = self::Extension|get#nullableProperty(c{self::Class}) in #t23 == null ?{core::int} 0 : #t23{core::int};
}
