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

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