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

class Class<T extends core::num> extends core::Object {
  covariant-by-class field self::Class::T field1;
  covariant-by-class field self::Class::T field2;
  constructor •(self::Class::T field1, self::Class::T field2) → self::Class<self::Class::T>
    : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
    ;
}
extension Extension1<T extends core::num> on self::Class<T> {
  static field latestType = self::Extension1|latestType;
  get field = self::Extension1|get#field;
  method method = self::Extension1|method;
  tearoff method = self::Extension1|get#method;
  method genericMethod = self::Extension1|genericMethod;
  tearoff genericMethod = self::Extension1|get#genericMethod;
  set field = self::Extension1|set#field;
}
extension Extension2<T extends core::num> on self::Class<T> {
  get field = self::Extension2|get#field;
  method method = self::Extension2|method;
  tearoff method = self::Extension2|get#method;
  method genericMethod = self::Extension2|genericMethod;
  tearoff genericMethod = self::Extension2|get#genericMethod;
  set field = self::Extension2|set#field;
}
static field core::String? Extension1|latestType;
static method Extension1|get#field<T extends core::num>(lowered final self::Class<self::Extension1|get#field::T> #this) → self::Extension1|get#field::T {
  self::Extension1|latestType = "${self::Extension1|get#field::T}";
  return #this.{self::Class::field1}{self::Extension1|get#field::T};
}
static method Extension1|set#field<T extends core::num>(lowered final self::Class<self::Extension1|set#field::T> #this, self::Extension1|set#field::T value) → void {
  self::Extension1|latestType = "${self::Extension1|set#field::T}";
  #this.{self::Class::field1} = value;
}
static method Extension1|method<T extends core::num>(lowered final self::Class<self::Extension1|method::T> #this) → self::Extension1|method::T {
  self::Extension1|latestType = "${self::Extension1|method::T}";
  return #this.{self::Class::field1}{self::Extension1|method::T};
}
static method Extension1|get#method<T extends core::num>(lowered final self::Class<self::Extension1|get#method::T> #this) → () → self::Extension1|get#method::T
  return () → self::Extension1|get#method::T => self::Extension1|method<self::Extension1|get#method::T>(#this);
static method Extension1|genericMethod<T extends core::num, S extends core::num>(lowered final self::Class<self::Extension1|genericMethod::T> #this, self::Extension1|genericMethod::S t) → self::Extension1|genericMethod::T {
  self::Extension1|latestType = "${self::Extension1|genericMethod::T}:${self::Extension1|genericMethod::S}";
  return #this.{self::Class::field1}{self::Extension1|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension1|genericMethod::T;
}
static method Extension1|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension1|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension1|get#genericMethod::T
  return <S extends core::num>(S t) → self::Extension1|get#genericMethod::T => self::Extension1|genericMethod<self::Extension1|get#genericMethod::T, S>(#this, t);
static method Extension2|get#field<T extends core::num>(lowered final self::Class<self::Extension2|get#field::T> #this) → self::Extension2|get#field::T
  return #this.{self::Class::field2}{self::Extension2|get#field::T};
static method Extension2|set#field<T extends core::num>(lowered final self::Class<self::Extension2|set#field::T> #this, self::Extension2|set#field::T value) → void {
  #this.{self::Class::field2} = value;
}
static method Extension2|method<T extends core::num>(lowered final self::Class<self::Extension2|method::T> #this) → self::Extension2|method::T
  return #this.{self::Class::field2}{self::Extension2|method::T};
static method Extension2|get#method<T extends core::num>(lowered final self::Class<self::Extension2|get#method::T> #this) → () → self::Extension2|get#method::T
  return () → self::Extension2|get#method::T => self::Extension2|method<self::Extension2|get#method::T>(#this);
static method Extension2|genericMethod<T extends core::num, S extends core::num>(lowered final self::Class<self::Extension2|genericMethod::T> #this, self::Extension2|genericMethod::S t) → self::Extension2|genericMethod::T
  return #this.{self::Class::field2}{self::Extension2|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension2|genericMethod::T;
static method Extension2|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension2|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension2|get#genericMethod::T
  return <S extends core::num>(S t) → self::Extension2|get#genericMethod::T => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T, S>(#this, t);
static method main() → dynamic {
  self::Class<core::int> c = new self::Class::•<core::int>(42, 87);
  self::expect(42, self::Extension1|get#field<core::num>(c));
  self::expect("num", self::Extension1|latestType);
  self::expect(42, self::Extension1|get#field<core::int>(c));
  self::expect("int", self::Extension1|latestType);
  self::expect(87, self::Extension2|get#field<core::num>(c));
  self::expect(42, self::Extension1|method<core::num>(c));
  self::expect("num", self::Extension1|latestType);
  self::expect(42, self::Extension1|method<core::int>(c));
  self::expect("int", self::Extension1|latestType);
  self::expect(87, self::Extension2|method<core::num>(c));
  () → core::num tearOffNumber1 = self::Extension1|get#method<core::num>(c);
  () → core::int tearOffInteger1 = self::Extension1|get#method<core::int>(c);
  () → core::num tearOff2 = self::Extension2|get#method<core::num>(c);
  self::expect(42, tearOffNumber1(){() → core::num});
  self::expect("num", self::Extension1|latestType);
  self::expect(42, tearOffInteger1(){() → core::int});
  self::expect("int", self::Extension1|latestType);
  self::expect(87, tearOff2(){() → core::num});
  self::expect(52, self::Extension1|genericMethod<core::num, core::int>(c, 10));
  self::expect("num:int", self::Extension1|latestType);
  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
  self::expect("int:int", self::Extension1|latestType);
  self::expect(97, self::Extension2|genericMethod<core::num, core::int>(c, 10));
  self::expect(52, self::Extension1|genericMethod<core::num, core::num>(c, 10));
  self::expect("num:num", self::Extension1|latestType);
  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
  self::expect("int:num", self::Extension1|latestType);
  self::expect(97, self::Extension2|genericMethod<core::num, core::num>(c, 10));
  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
  self::expect("int:int", self::Extension1|latestType);
  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
  self::expect("int:num", self::Extension1|latestType);
  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
  self::expect("int:int", self::Extension1|latestType);
  <S extends core::num>(S) → core::num genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num>(c);
  <S extends core::num>(S) → core::int genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int>(c);
  <S extends core::num>(S) → core::num genericTearOff2 = self::Extension2|get#genericMethod<core::num>(c);
  self::expect(52, genericTearOffNumber1<core::int>(10){(core::int) → core::num});
  self::expect("num:int", self::Extension1|latestType);
  self::expect(52, genericTearOffInteger1<core::int>(10){(core::int) → core::int});
  self::expect("int:int", self::Extension1|latestType);
  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
  self::expect(52, genericTearOffNumber1<core::num>(10){(core::num) → core::num});
  self::expect("num:num", self::Extension1|latestType);
  self::expect(52, genericTearOffInteger1<core::num>(10){(core::num) → core::int});
  self::expect("int:num", self::Extension1|latestType);
  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
  self::expect(23, let final self::Class<core::int> #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num>(#t1, #t2) in #t2);
  self::expect("num", self::Extension1|latestType);
  self::expect(23, let final self::Class<core::int> #t4 = c in let final core::int #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int>(#t4, #t5) in #t5);
  self::expect("int", self::Extension1|latestType);
  self::expect(67, let final self::Class<core::int> #t7 = c in let final core::int #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num>(#t7, #t8) in #t8);
  self::expect(23, self::Extension1|get#field<core::num>(c));
  self::expect(67, self::Extension2|get#field<core::num>(c));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Mismatch: expected=${expected}, actual=${actual}";
  }
}


Extra constant evaluation status:
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:91:41 -> IntConstant(23)
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:91:41 -> IntConstant(23)
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:93:41 -> IntConstant(23)
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:93:41 -> IntConstant(23)
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:95:41 -> IntConstant(67)
Evaluated: VariableGet @ org-dartlang-testcase:///explicit_generic_extension_access.dart:95:41 -> IntConstant(67)
Extra constant evaluation: evaluated: 217, effectively constant: 6
