library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/extension_object_pattern.dart:13:27: Error: The type 'int' is not exhaustively matched by the switch cases since it doesn't match 'int(getter: double())'.
// Try adding a wildcard pattern or cases that match 'int(getter: double())'.
// method2(int i) => switch (i) /* Error */ {
//                           ^
//
import self as self;
import "dart:core" as core;

extension Extension on core::int {
  get getter = self::Extension|get#getter;
}
static extension-member method Extension|get#getter(lowered final core::int #this) → core::num
  return #this;
static method method1(core::int i) → dynamic
  return block {
    core::int #t1;
    final synthesized core::int #0#0 = i;
    synthesized core::num #0#1;
    synthesized core::bool #0#1#isSet = false;
    #L1:
    {
      {
        hoisted core::num getter;
        if((#0#1#isSet ?{core::num} #0#1{core::num} : let final dynamic #t2 = #0#1#isSet = true in #0#1 = self::Extension|get#getter(#0#0)) is core::num) {
          getter = #0#1#isSet ?{core::num} #0#1{core::num} : let final dynamic #t3 = #0#1#isSet = true in #0#1 = self::Extension|get#getter(#0#0);
          #t1 = 0;
          break #L1;
        }
      }
    }
  } =>#t1;
static method method2(core::int i) → dynamic
  return block {
    core::int #t4;
    final synthesized core::int #0#0 = i;
    synthesized core::num #0#1;
    synthesized core::bool #0#1#isSet = false;
    #L2:
    {
      {
        hoisted core::int getter;
        if((#0#1#isSet ?{core::num} #0#1{core::num} : let final dynamic #t5 = #0#1#isSet = true in #0#1 = self::Extension|get#getter(#0#0)) is core::int) {
          getter = (#0#1#isSet ?{core::num} #0#1{core::num} : let final dynamic #t6 = #0#1#isSet = true in #0#1 = self::Extension|get#getter(#0#0)) as{Unchecked} core::int;
          #t4 = 0;
          break #L2;
        }
      }
    }
  } =>#t4;
