|  | library; | 
|  | import self as self; | 
|  | import "dart:core" as core; | 
|  |  | 
|  | abstract class A<X extends core::Object? = dynamic> extends core::Object { | 
|  | synthetic constructor •() → self::A<self::A::X%> | 
|  | : super core::Object::•() | 
|  | ; | 
|  | abstract get g() → (self::A::X%) → void; | 
|  | } | 
|  | class B extends core::Object implements self::A<core::int> { | 
|  | synthetic constructor •() → self::B | 
|  | : super core::Object::•() | 
|  | ; | 
|  | get g() → (core::int) → void | 
|  | return (core::int i) → void => let final core::int #t1 = self::callCount in let final core::int #t2 = self::callCount = #t1.{core::num::+}(1){(core::num) → core::int} in #t1; | 
|  | } | 
|  | static field core::int callCount = 0; | 
|  | static method foo(core::Object o, core::num value) → void { | 
|  | #L1: | 
|  | { | 
|  | final synthesized core::Object #0#0 = o; | 
|  | synthesized dynamic #0#2; | 
|  | synthesized core::bool #0#2#isSet = false; | 
|  | { | 
|  | hoisted (core::num) → void f; | 
|  | if(#0#0 is self::B && (let final dynamic #t3 = #0#2#isSet ?{(core::int) → void} #0#2{(core::int) → void} : let final dynamic #t4 = #0#2#isSet = true in #0#2 = #0#0{self::B}.{self::B::g}{(core::int) → void} in true) && (let final dynamic #t5 = f = (#0#2#isSet ?{(core::num) → void} #0#2{(core::num) → void} : let final dynamic #t6 = #0#2#isSet = true in #0#2 = #0#0{self::B}.{self::A::g}{(core::num) → void}) as{CovarianceCheck} (core::num) → void in true)) { | 
|  | { | 
|  | f(value){(core::num) → void}; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | static method main() → void { | 
|  | self::expect(0, self::callCount); | 
|  | self::throws(() → void => self::foo(new self::B::•(), 25.7)); | 
|  | self::expect(0, self::callCount); | 
|  | self::throws(() → void => self::foo(new self::B::•(), 1)); | 
|  | self::expect(0, self::callCount); | 
|  | } | 
|  | static method expect(dynamic expected, dynamic actual) → dynamic { | 
|  | if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) { | 
|  | throw "Expected ${expected}, actual ${actual}"; | 
|  | } | 
|  | } | 
|  | static method throws(() → void f) → dynamic { | 
|  | try { | 
|  | f(){() → void}; | 
|  | } | 
|  | on core::Object catch(final core::Object e) { | 
|  | core::print(e); | 
|  | return; | 
|  | } | 
|  | throw "No exception thrown"; | 
|  | } |