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

[@vm.bytecode=
Bytecode (version: stable) {
  Entry                2
  CheckStack
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#1
  JumpIfTrue           L1
  Push                 r1
  PushInt              2
  InstanceCall         2, CP#2
  JumpIfTrue           L2
  Push                 r1
  PushInt              3
  InstanceCall         2, CP#3
  JumpIfTrue           L3
  Jump                 L4
L1:
  PushInt              11
  PopLocal             r0
  Jump                 L4
L2:
  PushInt              22
  PopLocal             r0
  Jump                 L4
L3:
  PushInt              33
  PopLocal             r0
  Jump                 L4
L4:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = ICData target-name '==', arg-desc CP#0
  [2] = ICData target-name '==', arg-desc CP#0
  [3] = ICData target-name '==', arg-desc CP#0
}
]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 (version: stable) {
  Entry                2
  CheckStack
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#1
  JumpIfTrue           L1
  Push                 r1
  PushInt              2
  InstanceCall         2, CP#2
  JumpIfTrue           L1
  Push                 r1
  PushInt              3
  InstanceCall         2, CP#3
  JumpIfTrue           L1
  Push                 r1
  PushInt              4
  InstanceCall         2, CP#4
  JumpIfTrue           L2
  Push                 r1
  PushInt              5
  InstanceCall         2, CP#5
  JumpIfTrue           L2
  Push                 r1
  PushInt              6
  InstanceCall         2, CP#6
  JumpIfTrue           L2
  Jump                 L3
L1:
  PushInt              11
  PopLocal             r0
  Jump                 L4
L2:
  PushInt              22
  PopLocal             r0
  Jump                 L4
L3:
  PushInt              33
  PopLocal             r0
L4:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = ICData target-name '==', arg-desc CP#0
  [2] = ICData target-name '==', arg-desc CP#0
  [3] = ICData target-name '==', arg-desc CP#0
  [4] = ICData target-name '==', arg-desc CP#0
  [5] = ICData target-name '==', arg-desc CP#0
  [6] = ICData target-name '==', arg-desc CP#0
}
]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 (version: stable) {
  Entry                2
  CheckStack
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#1
  JumpIfTrue           L1
  Push                 r1
  PushInt              2
  InstanceCall         2, CP#2
  JumpIfTrue           L1
  Push                 r1
  PushInt              3
  InstanceCall         2, CP#3
  JumpIfTrue           L1
  Push                 r1
  PushInt              4
  InstanceCall         2, CP#4
  JumpIfTrue           L2
  Push                 r1
  PushInt              5
  InstanceCall         2, CP#5
  JumpIfTrue           L2
  Push                 r1
  PushInt              6
  InstanceCall         2, CP#6
  JumpIfTrue           L2
  Jump                 L3
L1:
  PushInt              11
  PopLocal             r0
  Jump                 L2
L2:
  PushInt              22
  PopLocal             r0
  PushInt              42
  ReturnTOS
L3:
  PushInt              33
  PopLocal             r0
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 2, num-type-args 0, names []
  [1] = ICData target-name '==', arg-desc CP#0
  [2] = ICData target-name '==', arg-desc CP#0
  [3] = ICData target-name '==', arg-desc CP#0
  [4] = ICData target-name '==', arg-desc CP#0
  [5] = ICData target-name '==', arg-desc CP#0
  [6] = ICData target-name '==', arg-desc CP#0
}
]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 (version: stable) {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
