| library; | 
 | // | 
 | // Problems in library: | 
 | // | 
 | // pkg/front_end/testcases/patterns/generic_extension_access.dart:27:34: Error: The type 'A<num>' is not exhaustively matched by the switch cases since it doesn't match 'I<num>(member: double()) && J<num>(member: int())'. | 
 | //  - 'A' is from 'pkg/front_end/testcases/patterns/generic_extension_access.dart'. | 
 | // Try adding a wildcard pattern or cases that match 'I<num>(member: double()) && J<num>(member: int())'. | 
 | // num method2(A<num> i) => switch (i) { | 
 | //                                  ^ | 
 | // | 
 | import self as self; | 
 | import "dart:core" as core; | 
 |  | 
 | class I<T extends core::Object? = dynamic> extends core::Object { | 
 |   synthetic constructor •() → self::I<self::I::T%> | 
 |     : super core::Object::•() | 
 |     ; | 
 | } | 
 | class J<T extends core::Object? = dynamic> extends self::I<self::J::T%> { | 
 |   synthetic constructor •() → self::J<self::J::T%> | 
 |     : super self::I::•() | 
 |     ; | 
 | } | 
 | class A<T extends core::Object? = dynamic> extends self::J<self::A::T%> { | 
 |   synthetic constructor •() → self::A<self::A::T%> | 
 |     : super self::J::•() | 
 |     ; | 
 | } | 
 | extension /* unnamed */ _extension#0<T extends core::Object? = dynamic> on self::I<T%> { | 
 |   get member = self::_extension#0|get#member; | 
 | } | 
 | static field core::int counter = 0; | 
 | static extension-member method _extension#0|get#member<T extends core::Object? = dynamic>(lowered final self::I<self::_extension#0|get#member::T%> #this) → core::num { | 
 |   self::counter = self::counter.{core::num::+}(1){(core::num) → core::int}; | 
 |   return self::_extension#0|get#member::T% =={core::Type::==}{(core::Object) → core::bool} #C1 ?{core::num} 0.5 : 1.{core::int::unary-}(){() → core::int}; | 
 | } | 
 | static method method1(self::I<core::num> i) → core::num | 
 |   return block { | 
 |     core::num #t1; | 
 |     final synthesized self::I<core::num> #0#0 = i; | 
 |     synthesized core::num #0#1; | 
 |     synthesized core::bool #0#1#isSet = false; | 
 |     #L1: | 
 |     { | 
 |       { | 
 |         hoisted core::num member; | 
 |         if((let final core::num #t2 = member = #0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t3 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0) in true) && member.{core::num::<}(0){(core::num) → core::bool}) { | 
 |           #t1 = member; | 
 |           break #L1; | 
 |         } | 
 |       } | 
 |       { | 
 |         hoisted core::num member; | 
 |         if(#0#0 is self::I<core::int> && (let final core::num #t4 = member = self::_extension#0|get#member<core::int>(#0#0{self::I<core::int>}) in true) && member.{core::num::<}(0){(core::num) → core::bool}) { | 
 |           #t1 = member; | 
 |           break #L1; | 
 |         } | 
 |       } | 
 |       { | 
 |         hoisted core::num member; | 
 |         if(true) { | 
 |           member = #0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t5 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0); | 
 |           #t1 = member.{core::num::unary-}(){() → core::num}; | 
 |           break #L1; | 
 |         } | 
 |       } | 
 |     } | 
 |   } =>#t1; | 
 | static method method2(self::A<core::num> i) → core::num | 
 |   return block { | 
 |     core::num #t6; | 
 |     final synthesized self::A<core::num> #0#0 = i; | 
 |     synthesized core::num #0#1; | 
 |     synthesized core::bool #0#1#isSet = false; | 
 |     #L2: | 
 |     { | 
 |       { | 
 |         hoisted core::int member; | 
 |         if((#0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t7 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0)) is core::int) { | 
 |           member = (#0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t8 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0)) as{Unchecked} core::int; | 
 |           #t6 = member; | 
 |           break #L2; | 
 |         } | 
 |       } | 
 |       { | 
 |         hoisted core::double member; | 
 |         if((#0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t9 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0)) is core::double) { | 
 |           member = (#0#1#isSet ?{core::num} #0#1{core::num} : let final core::bool* #t10 = #0#1#isSet = true in #0#1 = self::_extension#0|get#member<core::num>(#0#0)) as{Unchecked} core::double; | 
 |           #t6 = member; | 
 |           break #L2; | 
 |         } | 
 |       } | 
 |     } | 
 |   } =>#t6; | 
 | static method main() → dynamic { | 
 |   self::counter = 0; | 
 |   self::expect(1.{core::int::unary-}(){() → core::int}, self::method1(new self::A::•<core::int>())); | 
 |   self::expect(2, self::counter); | 
 |   self::counter = 0; | 
 |   self::expect(0.5.{core::double::unary-}(){() → core::double}, self::method1(new self::A::•<core::num>())); | 
 |   self::expect(1, self::counter); | 
 |   self::counter = 0; | 
 |   self::expect(0.5.{core::double::unary-}(){() → core::double}, self::method1(new self::A::•<core::double>())); | 
 |   self::expect(1, self::counter); | 
 |   self::counter = 0; | 
 |   self::expect(0.5, self::method2(new self::A::•<core::int>())); | 
 |   self::expect(1, self::counter); | 
 | } | 
 | static method expect(dynamic expected, dynamic actual) → dynamic { | 
 |   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) | 
 |     throw "Expected ${expected}, actual ${actual}"; | 
 | } | 
 |  | 
 | constants  { | 
 |   #C1 = TypeLiteralConstant(core::num) | 
 | } | 
 |  | 
 | Extra constant evaluation status: | 
 | Evaluated: InstanceInvocation @ org-dartlang-testcase:///generic_extension_access.dart:16:29 -> IntConstant(-1) | 
 | Evaluated: InstanceInvocation @ org-dartlang-testcase:///generic_extension_access.dart:34:10 -> IntConstant(-1) | 
 | Evaluated: InstanceInvocation @ org-dartlang-testcase:///generic_extension_access.dart:38:10 -> DoubleConstant(-0.5) | 
 | Evaluated: InstanceInvocation @ org-dartlang-testcase:///generic_extension_access.dart:42:10 -> DoubleConstant(-0.5) | 
 | Extra constant evaluation: evaluated: 129, effectively constant: 4 |