main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'


Function 'foo1', static, reflectable, debuggable
    parameters [dart:core::int* 'x'] (required: 1)
    return-type dart:core::int*

Bytecode {
  Entry                2
  CheckStack           0
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  PushInt              1
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              2
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  PushInt              3
  Push                 r1
  InterfaceCall        CP#0, 2
  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] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo2', static, reflectable, debuggable
    parameters [dart:core::int* 'x'] (required: 1)
    return-type dart:core::int*

Bytecode {
  Entry                2
  CheckStack           0
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  PushInt              1
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              2
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              3
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              4
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  PushInt              5
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  PushInt              6
  Push                 r1
  InterfaceCall        CP#0, 2
  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] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
}


Function 'foo3', static, reflectable, debuggable
    parameters [dart:core::int* 'x'] (required: 1)
    return-type dart:core::int*

Bytecode {
  Entry                2
  CheckStack           0
  PushNull
  PopLocal             r0
  Push                 FP[-5]
  PopLocal             r1
  PushInt              1
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              2
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              3
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L1
  PushInt              4
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  PushInt              5
  Push                 r1
  InterfaceCall        CP#0, 2
  JumpIfTrue           L2
  PushInt              6
  Push                 r1
  InterfaceCall        CP#0, 2
  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] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
}


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}


}
]library #lib from "#lib" as #lib {

  static method foo1(dart.core::int* x) → dart.core::int* {
    dart.core::int* y;
    #L1:
    switch(x) {
      #L2:
      case #C1:
        {
          y = 11;
          break #L1;
        }
      #L3:
      case #C2:
        {
          y = 22;
          break #L1;
        }
      #L4:
      case #C3:
        {
          y = 33;
          break #L1;
        }
    }
    return y;
  }
  static method foo2(dart.core::int* x) → dart.core::int* {
    dart.core::int* y;
    #L5:
    switch(x) {
      #L6:
      case #C1:
      case #C2:
      case #C3:
        {
          y = 11;
          break #L5;
        }
      #L7:
      case #C4:
      case #C5:
      case #C6:
        {
          y = 22;
          break #L5;
        }
      #L8:
      default:
        {
          y = 33;
        }
    }
    return y;
  }
  static method foo3(dart.core::int* x) → dart.core::int* {
    dart.core::int* y;
    switch(x) {
      #L9:
      case #C1:
      case #C2:
      case #C3:
        {
          y = 11;
          continue #L10;
        }
      #L10:
      case #C4:
      case #C5:
      case #C6:
        {
          y = 22;
          return 42;
        }
      #L11:
      default:
        {
          y = 33;
        }
    }
    return y;
  }
  static method main() → dynamic {}
}
constants  {
  #C1 = 1
  #C2 = 2
  #C3 = 3
  #C4 = 4
  #C5 = 5
  #C6 = 6
}
