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

class Class1 extends core::Object {
  field core::int field;
  constructor •(core::int field) → self::Class1
    : self::Class1::field = field, super core::Object::•()
    ;
  method toString() → core::String
    return "Class1(${this.{self::Class1::field}{core::int}})";
}
class Class2 extends core::Object {
  field core::int field;
  constructor •(core::int field) → self::Class2
    : self::Class2::field = field, super core::Object::•()
    ;
  method toString() → core::String
    return "Class2(${this.{self::Class2::field}{core::int}})";
}
extension _extension#0 on self::Class1 {
  method method = self::_extension#0|method;
  tearoff method = self::_extension#0|get#method;
  method genericMethod = self::_extension#0|genericMethod;
  tearoff genericMethod = self::_extension#0|get#genericMethod;
  get property = self::_extension#0|get#property;
  set property = self::_extension#0|set#property;
}
extension _extension#1 on self::Class2 {
  method method = self::_extension#1|method;
  tearoff method = self::_extension#1|get#method;
  method genericMethod = self::_extension#1|genericMethod;
  tearoff genericMethod = self::_extension#1|get#genericMethod;
  get property = self::_extension#1|get#property;
  set property = self::_extension#1|set#property;
}
static method _extension#0|method(lowered final self::Class1 #this) → core::int {
  core::print("Extension1.method on ${#this}");
  return #this.{self::Class1::field}{core::int};
}
static method _extension#0|get#method(lowered final self::Class1 #this) → () → core::int
  return () → core::int => self::_extension#0|method(#this);
static method _extension#0|genericMethod<T extends core::num>(lowered final self::Class1 #this, self::_extension#0|genericMethod::T t) → core::num {
  core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T}>(${t}) on ${#this}");
  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
}
static method _extension#0|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
  return <T extends core::num>(T t) → core::num => self::_extension#0|genericMethod<T>(#this, t);
static method _extension#0|get#property(lowered final self::Class1 #this) → core::int {
  core::print("Extension1.property get on ${#this}");
  return #this.{self::Class1::field}{core::int};
}
static method _extension#0|set#property(lowered final self::Class1 #this, core::int value) → void {
  #this.{self::Class1::field} = value;
  core::print("Extension1.property set(${value}) on ${#this}");
  value = value.{core::num::+}(1){(core::num) → core::int};
}
static method _extension#1|method(lowered final self::Class2 #this) → core::int {
  core::print("Extension2.method on ${#this}");
  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → core::int};
}
static method _extension#1|get#method(lowered final self::Class2 #this) → () → core::int
  return () → core::int => self::_extension#1|method(#this);
static method _extension#1|genericMethod<T extends core::num>(lowered final self::Class2 #this, self::_extension#1|genericMethod::T t) → core::num {
  core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T}>(${t}) on ${#this}");
  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
}
static method _extension#1|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
  return <T extends core::num>(T t) → core::num => self::_extension#1|genericMethod<T>(#this, t);
static method _extension#1|get#property(lowered final self::Class2 #this) → core::int {
  core::print("Extension2.property get on ${#this}");
  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
}
static method _extension#1|set#property(lowered final self::Class2 #this, core::int value) → void {
  core::print("Extension2.property set(${value}) on ${#this}");
  value = value.{core::num::+}(1){(core::num) → core::int};
  #this.{self::Class2::field} = value;
}
static method main() → dynamic {
  self::Class1 c10 = new self::Class1::•(0);
  self::Class1 c11 = new self::Class1::•(1);
  self::testExtension1(c10, c11, c10, c11);
  self::Class2 c20 = new self::Class2::•(0);
  self::Class2 c21 = new self::Class2::•(1);
  self::testExtension2(c20, c21, c20);
}
static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
  self::expect(0, self::_extension#0|method(c0));
  self::expect(1, self::_extension#0|method(c1));
  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::_extension#0|method(#t1{self::Class1}));
  self::expect(42, self::_extension#0|genericMethod<core::int>(c0, 42));
  self::expect(43, self::_extension#0|genericMethod<core::num>(c0, 43));
  self::expect(88, self::_extension#0|genericMethod<core::int>(c1, 87));
  self::expect(89, self::_extension#0|genericMethod<core::num>(c1, 88));
  self::expect(0, self::_extension#0|get#property(c0));
  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::_extension#0|get#property(#t2{self::Class1}));
  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
  self::expect(1, self::_extension#0|get#property(c1));
  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
}
static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
  self::expect(3, self::_extension#1|method(c0));
  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::_extension#1|method(#t27{self::Class2}));
  self::expect(4, self::_extension#1|method(c1));
  self::expect(46, self::_extension#1|genericMethod<core::int>(c0, 42));
  self::expect(47, self::_extension#1|genericMethod<core::num>(c0, 43));
  self::expect(92, self::_extension#1|genericMethod<core::int>(c1, 87));
  self::expect(93, self::_extension#1|genericMethod<core::num>(c1, 88));
  self::expect(5, self::_extension#1|get#property(c0));
  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::_extension#1|get#property(#t28{self::Class2}));
  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
  self::expect(48, self::_extension#1|get#property(c0));
  self::expect(6, self::_extension#1|get#property(c1));
  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
  self::expect(49, self::_extension#1|get#property(c1));
  self::expect(49, let final core::int #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
  self::expect(55, let final core::int #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Mismatch: expected=${expected}, actual=${actual}";
  }
}
