library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/issue51636.dart:5:23: Error: Undefined name 'unknownName'.
// int f<A>() => switch (unknownName) {
//                       ^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

static method f<A extends core::Object? = dynamic>() → core::int
  return block {
    core::int #t1;
    final synthesized invalid-type #0#0 = invalid-expression "pkg/front_end/testcases/patterns/issue51636.dart:5:23: Error: Undefined name 'unknownName'.
int f<A>() => switch (unknownName) {
                      ^^^^^^^^^^^";
    synthesized core::int #0#2;
    synthesized core::bool #0#2#isSet = false;
    final const synthesized core::int #0#3 = #C1;
    final const synthesized core::int #0#6 = #C2;
    #L1:
    {
      {
        if(#0#0 is core::List<self::f::A%> && (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t2 = #0#2#isSet = true in #0#2 = #0#0.{core::List::length}{core::int}).{core::num::<=}(#C1){(core::num) → core::bool}) {
          #t1 = 1;
          break #L1;
        }
      }
      {
        hoisted self::f::A% x;
        hoisted core::List<self::f::A%> xs;
        if(#0#0 is core::List<self::f::A%> && (#0#2#isSet ?{core::int} #0#2 : let final dynamic #t3 = #0#2#isSet = true in #0#2 = #0#0.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) {
          x = #0#0.{core::List::[]}(0){(core::int) → self::f::A%};
          xs = #0#0.{core::List::sublist}(1){(core::int, [core::int?]) → core::List<self::f::A%>};
          #t1 = 2;
          break #L1;
        }
      }
    }
  } =>#t1;
static method main() → void {}

constants  {
  #C1 = 0
  #C2 = 1
}
