| library; | 
 | import self as self; | 
 | import "dart:core" as core; | 
 |  | 
 | typedef Callback<contravariant T extends core::Object? = dynamic> = (T%) → void; | 
 | class Foo<T extends core::Object? = dynamic> extends core::Object { | 
 |   final field self::Foo::T% finalField; | 
 |   final field (self::Foo::T%) → void callbackField; | 
 |   late covariant-by-class field self::Foo::T% mutableField; | 
 |   late field (self::Foo::T%) → void mutableCallbackField; | 
 |   constructor •(self::Foo::T% finalField, (self::Foo::T%) → void callbackField) → self::Foo<self::Foo::T%> | 
 |     : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•() | 
 |     ; | 
 |   method method(covariant-by-class self::Foo::T% x) → void {} | 
 |   set setter(covariant-by-class self::Foo::T% x) → void {} | 
 |   method withCallback((self::Foo::T%) → void callback) → void { | 
 |     callback(this.{self::Foo::finalField}{self::Foo::T%}){(self::Foo::T%) → void}; | 
 |   } | 
 | } | 
 | static method main() → dynamic { | 
 |   self::Foo<core::int> fooInt = new self::Foo::•<core::int>(1, (core::int x) → void {}); | 
 |   fooInt.{self::Foo::method}(3){(core::int) → void}; | 
 |   fooInt.{self::Foo::setter} = 3; | 
 |   fooInt.{self::Foo::withCallback}((core::int x) → void {}){((core::int) → void) → void}; | 
 |   fooInt.{self::Foo::withCallback}((core::num x) → void {}){((core::int) → void) → void}; | 
 |   fooInt.{self::Foo::mutableField} = 3; | 
 |   fooInt.{self::Foo::mutableCallbackField} = (core::int x) → void {}; | 
 |   self::Foo<core::num> fooNum = fooInt; | 
 |   fooNum.{self::Foo::method}(3){(core::num) → void}; | 
 |   self::throws(() → void => fooNum.{self::Foo::method}(2.5){(core::num) → void}); | 
 |   fooNum.{self::Foo::setter} = 3; | 
 |   self::throws(() → void => fooNum.{self::Foo::setter} = 2.5); | 
 |   fooNum.{self::Foo::withCallback}((core::num x) → void {}){((core::num) → void) → void}; | 
 |   fooNum.{self::Foo::mutableField} = 3; | 
 |   self::throws(() → void => fooNum.{self::Foo::mutableField} = 2.5); | 
 |   self::throws(() → void => let final self::Foo<core::num> #t1 = fooNum in let final core::int #t2 = 3 in (#t1.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck} (core::num) → void)(#t2){(core::num) → void}); | 
 |   self::throws(() → void => let final self::Foo<core::num> #t3 = fooNum in let final core::double #t4 = 2.5 in (#t3.{self::Foo::mutableCallbackField}{(core::num) → void} as{TypeError,CovarianceCheck} (core::num) → void)(#t4){(core::num) → void}); | 
 |   fooNum.{self::Foo::mutableCallbackField} = (core::num x) → void {}; | 
 | } | 
 | static method throws(() → void f) → dynamic { | 
 |   try { | 
 |     f(){() → void}; | 
 |   } | 
 |   on core::Object catch(final core::Object e) { | 
 |     core::print(e); | 
 |     return; | 
 |   } | 
 |   throw "Missing exception"; | 
 | } | 
 |  | 
 |  | 
 | Extra constant evaluation status: | 
 | Evaluated: VariableGet @ org-dartlang-testcase:///covariant_generic.dart:43:44 -> IntConstant(3) | 
 | Evaluated: VariableGet @ org-dartlang-testcase:///covariant_generic.dart:44:44 -> DoubleConstant(2.5) | 
 | Extra constant evaluation: evaluated: 73, effectively constant: 2 |