|  | library; | 
|  | import self as self; | 
|  | import "dart:core" as core; | 
|  |  | 
|  | typedef b = core::int; | 
|  | typedef c = core::String; | 
|  | static method f(dynamic a, [dynamic b = #C1]) → core::String | 
|  | return "${a}, ${b}"; | 
|  | static method a<T1 extends core::Object? = dynamic, T2 extends core::Object? = dynamic>(core::int x) → core::String { | 
|  | return "a<${self::a::T1%}, ${self::a::T2%}>(${x})"; | 
|  | } | 
|  | static method main() → dynamic { | 
|  | self::expect("${#C3}, null", self::f(#C3.{core::Object::toString}(){() → core::String})); | 
|  | } | 
|  | static method expect(dynamic expected, dynamic actual) → dynamic { | 
|  | if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) | 
|  | throw "Expected ${expected}, actual ${actual}"; | 
|  | } | 
|  |  | 
|  | constants  { | 
|  | #C1 = null | 
|  | #C2 = static-tearoff self::a | 
|  | #C3 = instantiation #C2 <core::int, core::String> | 
|  | } |