Bytecode
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/loops.dart::main
Library 'DART_SDK/pkg/dart2bytecode/testcases/loops.dart'
    name '#lib'
    script 'DART_SDK/pkg/dart2bytecode/testcases/loops.dart'

Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/loops.dart'


Function 'testFor', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                2
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L2:
  CheckStack           1
  Push                 r1
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  CompareIntLt
  JumpIfFalse          L1
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InterfaceCall        CP#2, 2
  AddInt
  PopLocal             r0
  Push                 r1
  PushInt              1
  AddInt
  StoreLocal           r1
  Drop1
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'testForBreak', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                2
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L3:
  CheckStack           1
  Push                 r1
  PushInt              0
  CompareIntGe
  JumpIfFalse          L1
  Push                 r1
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  CompareIntGe
  JumpIfFalse          L2
  Jump                 L1
L2:
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InterfaceCall        CP#2, 2
  AddInt
  PopLocal             r0
  Push                 r1
  PushInt              1
  AddInt
  StoreLocal           r1
  Drop1
  Jump                 L3
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'testForContinue', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                2
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              100
  NegateInt
  PopLocal             r1
L4:
  CheckStack           1
  Push                 r1
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  CompareIntLt
  JumpIfFalse          L1
  Push                 r1
  PushInt              0
  CompareIntLt
  JumpIfFalse          L2
  Jump                 L3
L2:
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InterfaceCall        CP#2, 2
  AddInt
  PopLocal             r0
L3:
  Push                 r1
  PushInt              1
  AddInt
  StoreLocal           r1
  Drop1
  Jump                 L4
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'testWhile', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                4
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L2:
  CheckStack           1
  Push                 r1
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  CompareIntLt
  JumpIfFalse          L1
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  PopLocal             r2
  Push                 r2
  PushInt              1
  AddInt
  StoreLocal           r1
  PopLocal             r3
  Push                 r2
  InterfaceCall        CP#2, 2
  AddInt
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'testDoWhile', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                2
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L1:
  CheckStack           1
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InterfaceCall        CP#0, 2
  AddInt
  PopLocal             r0
  Push                 r1
  PushInt              1
  AddInt
  PopLocal             r1
  Push                 r1
  Push                 FP[-5]
  InterfaceCall        CP#2, 1
  CompareIntLt
  JumpIfTrue           L1
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
}


Function 'testForIn', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                3
  CheckStack           0
  PushInt              0
  PopLocal             r0
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r1
L2:
  CheckStack           1
  Push                 r1
  InterfaceCall        CP#2, 1
  JumpIfFalse          L1
  Push                 r1
  InterfaceCall        CP#4, 1
  PopLocal             r2
  Push                 r0
  Push                 r2
  AddInt
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
}


Function 'testForInWithOuterVar', static, reflectable, debuggable
    parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
    return-type dart:core::int

Bytecode {
  Entry                4
  CheckStack           0
  PushInt              0
  PopLocal             r0
  PushInt              42
  PopLocal             r1
  Push                 FP[-5]
  InterfaceCall        CP#0, 1
  PopLocal             r2
L2:
  CheckStack           1
  Push                 r2
  InterfaceCall        CP#2, 1
  JumpIfFalse          L1
  Push                 r2
  InterfaceCall        CP#4, 1
  PopLocal             r3
  Push                 r3
  PopLocal             r1
  Push                 r0
  Push                 r1
  AddInt
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
}
ConstantPool {
  [0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
  [1] = Reserved
  [2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
  [3] = Reserved
  [4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
  [5] = Reserved
}


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

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

