library;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract get b() → self::B;
  abstract get i() → core::int;
}
abstract class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  abstract get c() → self::C;
  abstract get i() → core::int;
}
abstract class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  abstract get i() → core::int;
}
static method ifCase(dynamic o) → dynamic {
  {
    final synthesized dynamic #0#0 = o;
    {
      hoisted self::A a;
      if(#0#0 is self::A) {
        a = #0#0{self::A};
        {
          core::print(a);
        }
      }
    }
  }
  {
    final synthesized dynamic #1#0 = o;
    {
      hoisted self::B b;
      if(#1#0 is self::A) {
        b = #1#0{self::A}.{self::A::b}{self::B};
        {
          core::print(b);
        }
      }
    }
  }
  {
    final synthesized dynamic #2#0 = o;
    {
      hoisted self::C c;
      if(#2#0 is self::A) {
        c = #2#0{self::A}.{self::A::b}{self::B}.{self::B::c}{self::C};
        {
          core::print(c);
        }
      }
    }
  }
  {
    final synthesized dynamic #3#0 = o;
    {
      hoisted core::int i;
      if(#3#0 is self::A) {
        i = #3#0{self::A}.{self::A::b}{self::B}.{self::B::c}{self::C}.{self::C::i}{core::int};
        {
          core::print(i);
        }
      }
    }
  }
  {
    final synthesized dynamic #4#0 = o;
    {
      hoisted self::B b;
      hoisted core::int i;
      if(#4#0 is self::A) {
        b = #4#0{self::A}.{self::A::b}{self::B};
        i = #4#0{self::A}.{self::A::i}{core::int};
        {
          core::print(b);
          core::print(i);
        }
      }
    }
  }
  {
    final synthesized dynamic #5#0 = o;
    {
      hoisted self::B b;
      if(#5#0 is self::A && #C1 =={core::num::==}{(core::Object) → core::bool} #5#0{self::A}.{self::A::i}{core::int}) {
        b = #5#0{self::A}.{self::A::b}{self::B};
        {
          core::print(b);
        }
      }
    }
  }
  {
    final synthesized dynamic #6#0 = o;
    {
      hoisted self::B b;
      if(#6#0 is self::A && (let final self::B #t1 = b = #6#0{self::A}.{self::A::b}{self::B} in true) && #C1 =={core::num::==}{(core::Object) → core::bool} #6#0{self::A}.{self::A::i}{core::int}) {
        core::print(b);
      }
    }
  }
  {
    final synthesized dynamic #7#0 = o;
    synthesized self::B #7#2;
    synthesized core::bool #7#2#isSet = false;
    {
      hoisted self::B b;
      hoisted self::C c;
      if(#7#0 is self::A && (let final self::B #t2 = b = #7#2#isSet ?{self::B} #7#2{self::B} : let final core::bool* #t3 = #7#2#isSet = true in #7#2 = #7#0{self::A}.{self::A::b}{self::B} in true) && #C1 =={core::num::==}{(core::Object) → core::bool} #7#0{self::A}.{self::A::i}{core::int} && ((let final self::C #t4 = c = (#7#2#isSet ?{self::B} #7#2{self::B} : let final core::bool* #t5 = #7#2#isSet = true in #7#2 = #7#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C} in true) && #C2 =={core::num::==}{(core::Object) → core::bool} (#7#2#isSet ?{self::B} #7#2{self::B} : let final core::bool* #t6 = #7#2#isSet = true in #7#2 = #7#0{self::A}.{self::A::b}{self::B}).{self::B::i}{core::int})) {
        core::print(b);
        core::print(c);
      }
    }
  }
}
static method switchExpression(dynamic o) → dynamic
  return block {
    core::Object? #t7;
    final synthesized dynamic #0#0 = o;
    synthesized self::B #0#2;
    synthesized core::bool #0#2#isSet = false;
    synthesized self::C #0#3;
    synthesized core::bool #0#3#isSet = false;
    synthesized core::int #0#5;
    synthesized core::bool #0#5#isSet = false;
    synthesized core::bool #0#7;
    synthesized core::bool #0#7#isSet = false;
    #L1:
    {
      {
        hoisted self::A a;
        if(#0#0 is self::A) {
          a = #0#0{self::A};
          #t7 = a;
          break #L1;
        }
      }
      {
        hoisted self::B b;
        if(#0#0 is self::A) {
          b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t8 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B};
          #t7 = b;
          break #L1;
        }
      }
      {
        hoisted self::C c;
        if(#0#0 is self::A) {
          c = #0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t9 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t10 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C};
          #t7 = c;
          break #L1;
        }
      }
      {
        hoisted core::int i;
        if(#0#0 is self::A) {
          i = (#0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t11 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t12 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C}).{self::C::i}{core::int};
          #t7 = i;
          break #L1;
        }
      }
      {
        hoisted self::B b;
        hoisted core::int i;
        if(#0#0 is self::A) {
          b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t13 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B};
          i = #0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t14 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int};
          #t7 = "${b}${i}";
          break #L1;
        }
      }
      {
        hoisted self::B b;
        if(#0#0 is self::A && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t15 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t16 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int}))) {
          b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t17 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B};
          #t7 = b;
          break #L1;
        }
      }
      {
        hoisted self::B b;
        if(#0#0 is self::A && (let final self::B #t18 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t19 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t20 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t21 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int}))) {
          #t7 = b;
          break #L1;
        }
      }
      {
        hoisted self::B b;
        hoisted self::C c;
        if(#0#0 is self::A && (let final self::B #t22 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t23 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t24 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t25 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int})) && ((let final self::C #t26 = c = #0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t27 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t28 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C} in true) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t29 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::i}{core::int})) {
          #t7 = "${b}${c}";
          break #L1;
        }
      }
      {
        if(true) {
          #t7 = null;
          break #L1;
        }
      }
      throw new _in::ReachabilityError::•("`null` encountered as case in a switch expression with a non-nullable type.");
    }
  } =>#t7;
static method switchStatement(dynamic o) → dynamic {
  dynamic v;
  #L2:
  {
    final synthesized dynamic #0#0 = o;
    synthesized self::B #0#2;
    synthesized core::bool #0#2#isSet = false;
    synthesized self::C #0#3;
    synthesized core::bool #0#3#isSet = false;
    synthesized core::int #0#5;
    synthesized core::bool #0#5#isSet = false;
    synthesized core::bool #0#7;
    synthesized core::bool #0#7#isSet = false;
    {
      hoisted self::A a;
      if(#0#0 is self::A && (let final self::A #t30 = a = #0#0{self::A} in true)) {
        {
          v = a;
          break #L2;
        }
      }
    }
    {
      hoisted self::B b;
      if(#0#0 is self::A && (let final self::B #t31 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t32 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true)) {
        {
          v = b;
          break #L2;
        }
      }
    }
    {
      hoisted self::C c;
      if(#0#0 is self::A && (let final self::C #t33 = c = #0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t34 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t35 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C} in true)) {
        {
          v = c;
          break #L2;
        }
      }
    }
    {
      hoisted core::int i;
      if(#0#0 is self::A && (let final core::int #t36 = i = (#0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t37 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t38 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C}).{self::C::i}{core::int} in true)) {
        {
          v = i;
          break #L2;
        }
      }
    }
    {
      hoisted self::B b;
      hoisted core::int i;
      if(#0#0 is self::A && (let final self::B #t39 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t40 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true) && (let final core::int #t41 = i = #0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t42 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int} in true)) {
        {
          v = "${b}${i}";
          break #L2;
        }
      }
    }
    {
      hoisted self::B b;
      if(#0#0 is self::A && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t43 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t44 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int})) && (let final self::B #t45 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t46 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true)) {
        {
          v = b;
          break #L2;
        }
      }
    }
    {
      hoisted self::B b;
      if(#0#0 is self::A && (let final self::B #t47 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t48 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t49 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t50 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int}))) {
        {
          v = b;
          break #L2;
        }
      }
    }
    {
      hoisted self::B b;
      hoisted self::C c;
      if(#0#0 is self::A && (let final self::B #t51 = b = #0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t52 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B} in true) && (#0#7#isSet ?{core::bool} #0#7{core::bool} : let final core::bool* #t53 = #0#7#isSet = true in #0#7 = #C1 =={core::num::==}{(core::Object) → core::bool} (#0#5#isSet ?{core::int} #0#5{core::int} : let final core::bool* #t54 = #0#5#isSet = true in #0#5 = #0#0{self::A}.{self::A::i}{core::int})) && ((let final self::C #t55 = c = #0#3#isSet ?{self::C} #0#3{self::C} : let final core::bool* #t56 = #0#3#isSet = true in #0#3 = (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t57 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::c}{self::C} in true) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#2#isSet ?{self::B} #0#2{self::B} : let final core::bool* #t58 = #0#2#isSet = true in #0#2 = #0#0{self::A}.{self::A::b}{self::B}).{self::B::i}{core::int})) {
        {
          v = "${b}${c}";
        }
      }
    }
  }
  return v;
}

constants  {
  #C1 = 5
  #C2 = 7
}
