library;
//
// Problems in library:
//
// pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:5:50: Error: Undefined name 'y'.
// test1(dynamic x) => [1, if (x case int y) 2 else y, 3]; // Error.
//                                                  ^
//
// pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:7:55: Error: Undefined name 'y'.
// test2(dynamic x) => <int>{1, if (x case int y) 2 else y, 3}; // Error.
//                                                       ^
//
// pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:9:69: Error: Undefined name 'y'.
// test3(dynamic x) => <int, int>{1: 1, if (x case int y) 2: 2 else 2: y, 3: 3}; // Error.
//                                                                     ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method test1(dynamic x) → dynamic
  return block {
    final core::List<core::int> #t1 = <core::int>[1];
    {
      final synthesized dynamic #0#0 = x;
      {
        hoisted core::int y;
        if(#0#0 is core::int) {
          y = #0#0{core::int};
          #t1.{core::List::add}{Invariant}(2){(core::int) → void};
        }
        else
          #t1.{core::List::add}{Invariant}(invalid-expression "pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:5:50: Error: Undefined name 'y'.
test1(dynamic x) => [1, if (x case int y) 2 else y, 3]; // Error.
                                                 ^"){(core::int) → void};
      }
    }
    #t1.{core::List::add}{Invariant}(3){(core::int) → void};
  } =>#t1;
static method test2(dynamic x) → dynamic
  return block {
    final core::Set<core::int> #t2 = col::LinkedHashSet::•<core::int>();
    #t2.{core::Set::add}{Invariant}(1){(core::int) → core::bool};
    {
      final synthesized dynamic #0#0 = x;
      {
        hoisted core::int y;
        if(#0#0 is core::int) {
          y = #0#0{core::int};
          #t2.{core::Set::add}{Invariant}(2){(core::int) → core::bool};
        }
        else
          #t2.{core::Set::add}{Invariant}(invalid-expression "pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:7:55: Error: Undefined name 'y'.
test2(dynamic x) => <int>{1, if (x case int y) 2 else y, 3}; // Error.
                                                      ^"){(core::int) → core::bool};
      }
    }
    #t2.{core::Set::add}{Invariant}(3){(core::int) → core::bool};
  } =>#t2;
static method test3(dynamic x) → dynamic
  return block {
    final core::Map<core::int, core::int> #t3 = <core::int, core::int>{};
    #t3.{core::Map::[]=}{Invariant}(1, 1){(core::int, core::int) → void};
    {
      final synthesized dynamic #0#0 = x;
      {
        hoisted core::int y;
        if(#0#0 is core::int) {
          y = #0#0{core::int};
          #t3.{core::Map::[]=}{Invariant}(2, 2){(core::int, core::int) → void};
        }
        else
          #t3.{core::Map::[]=}{Invariant}(2, invalid-expression "pkg/front_end/testcases/patterns/if_else_in_collections_errors.dart:9:69: Error: Undefined name 'y'.
test3(dynamic x) => <int, int>{1: 1, if (x case int y) 2: 2 else 2: y, 3: 3}; // Error.
                                                                    ^"){(core::int, core::int) → void};
      }
    }
    #t3.{core::Map::[]=}{Invariant}(3, 3){(core::int, core::int) → void};
  } =>#t3;
static method main() → dynamic {}
