library #lib;
import self as self;
import "dart:core" as core;

[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushConstant         CP#0
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushConstant         CP#2
  InstanceCall         2, CP#3
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#5
  InstanceCall         2, CP#6
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Push                 r1
  PushConstant         CP#7
  InstanceCall         2, CP#8
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L3
  Jump                 L4
L1:
  PushConstant         CP#9
  PopLocal             r0
  Jump                 L4
L2:
  PushConstant         CP#10
  PopLocal             r0
  Jump                 L4
L3:
  PushConstant         CP#11
  PopLocal             r0
  Jump                 L4
L4:
  Push                 r0
  ReturnTOS
  PushConstant         CP#0
  ReturnTOS
}
ConstantPool {
  [0] = Null
  [1] = ArgDesc num-args 2, num-type-args 0, names []
  [2] = Int 1
  [3] = ICData target-name '==', arg-desc CP#1
  [4] = Bool true
  [5] = Int 2
  [6] = ICData target-name '==', arg-desc CP#1
  [7] = Int 3
  [8] = ICData target-name '==', arg-desc CP#1
  [9] = Int 11
  [10] = Int 22
  [11] = Int 33
}
]static method foo1(core::int x) → core::int {
  core::int y;
  #L1:
  switch(x) {
    #L2:
    case 1:
      {
        y = 11;
        break #L1;
      }
    #L3:
    case 2:
      {
        y = 22;
        break #L1;
      }
    #L4:
    case 3:
      {
        y = 33;
        break #L1;
      }
  }
  return y;
}
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushConstant         CP#0
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushConstant         CP#2
  InstanceCall         2, CP#3
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#5
  InstanceCall         2, CP#6
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#7
  InstanceCall         2, CP#8
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#9
  InstanceCall         2, CP#10
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Push                 r1
  PushConstant         CP#11
  InstanceCall         2, CP#12
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Push                 r1
  PushConstant         CP#13
  InstanceCall         2, CP#14
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Jump                 L3
L1:
  PushConstant         CP#15
  PopLocal             r0
  Jump                 L4
L2:
  PushConstant         CP#16
  PopLocal             r0
  Jump                 L4
L3:
  PushConstant         CP#17
  PopLocal             r0
L4:
  Push                 r0
  ReturnTOS
  PushConstant         CP#0
  ReturnTOS
}
ConstantPool {
  [0] = Null
  [1] = ArgDesc num-args 2, num-type-args 0, names []
  [2] = Int 1
  [3] = ICData target-name '==', arg-desc CP#1
  [4] = Bool true
  [5] = Int 2
  [6] = ICData target-name '==', arg-desc CP#1
  [7] = Int 3
  [8] = ICData target-name '==', arg-desc CP#1
  [9] = Int 4
  [10] = ICData target-name '==', arg-desc CP#1
  [11] = Int 5
  [12] = ICData target-name '==', arg-desc CP#1
  [13] = Int 6
  [14] = ICData target-name '==', arg-desc CP#1
  [15] = Int 11
  [16] = Int 22
  [17] = Int 33
}
]static method foo2(core::int x) → core::int {
  core::int y;
  #L5:
  switch(x) {
    #L6:
    case 1:
    case 2:
    case 3:
      {
        y = 11;
        break #L5;
      }
    #L7:
    case 4:
    case 5:
    case 6:
      {
        y = 22;
        break #L5;
      }
    #L8:
    default:
      {
        y = 33;
      }
  }
  return y;
}
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushConstant         CP#0
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushConstant         CP#2
  InstanceCall         2, CP#3
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#5
  InstanceCall         2, CP#6
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#7
  InstanceCall         2, CP#8
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L1
  Push                 r1
  PushConstant         CP#9
  InstanceCall         2, CP#10
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Push                 r1
  PushConstant         CP#11
  InstanceCall         2, CP#12
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Push                 r1
  PushConstant         CP#13
  InstanceCall         2, CP#14
  PushConstant         CP#4
  IfEqStrictTOS
  Jump                 L2
  Jump                 L3
L1:
  PushConstant         CP#15
  PopLocal             r0
  Jump                 L2
L2:
  PushConstant         CP#16
  PopLocal             r0
  PushConstant         CP#17
  ReturnTOS
L3:
  PushConstant         CP#18
  PopLocal             r0
  Push                 r0
  ReturnTOS
  PushConstant         CP#0
  ReturnTOS
}
ConstantPool {
  [0] = Null
  [1] = ArgDesc num-args 2, num-type-args 0, names []
  [2] = Int 1
  [3] = ICData target-name '==', arg-desc CP#1
  [4] = Bool true
  [5] = Int 2
  [6] = ICData target-name '==', arg-desc CP#1
  [7] = Int 3
  [8] = ICData target-name '==', arg-desc CP#1
  [9] = Int 4
  [10] = ICData target-name '==', arg-desc CP#1
  [11] = Int 5
  [12] = ICData target-name '==', arg-desc CP#1
  [13] = Int 6
  [14] = ICData target-name '==', arg-desc CP#1
  [15] = Int 11
  [16] = Int 22
  [17] = Int 42
  [18] = Int 33
}
]static method foo3(core::int x) → core::int {
  core::int y;
  switch(x) {
    #L9:
    case 1:
    case 2:
    case 3:
      {
        y = 11;
        continue #L10;
      }
    #L10:
    case 4:
    case 5:
    case 6:
      {
        y = 22;
        return 42;
      }
    #L11:
    default:
      {
        y = 33;
      }
  }
  return y;
}
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  PushConstant         CP#0
  ReturnTOS
}
ConstantPool {
  [0] = Null
}
]static method main() → dynamic {}
