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

[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L2:
  CheckStack
  Push                 r1
  Push                 FP[-5]
  InstanceCall         1, CP#1
  InstanceCall         2, CP#3
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InstanceCall         2, CP#4
  InstanceCall         2, CP#5
  PopLocal             r0
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#6
  StoreLocal           r1
  Drop1
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData get target-name 'length', arg-desc CP#0
  [2] = ArgDesc num-args 2, num-type-args 0, names []
  [3] = ICData target-name '<', arg-desc CP#2
  [4] = ICData target-name '[]', arg-desc CP#2
  [5] = ICData target-name '+', arg-desc CP#2
  [6] = ICData target-name '+', arg-desc CP#2
}
]static method test_for(core::List<core::int> list) → core::int {
  core::int sum = 0;
  for (core::int i = 0; i.{core::num::<}(list.{core::List::length}); i = i.{core::num::+}(1)) {
    sum = sum.{core::num::+}(list.{core::List::[]}(i));
  }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L3:
  CheckStack
  Push                 r1
  PushInt              0
  InstanceCall         2, CP#1
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r1
  Push                 FP[-5]
  InstanceCall         1, CP#3
  InstanceCall         2, CP#4
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  Jump                 L1
L2:
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InstanceCall         2, CP#5
  InstanceCall         2, CP#6
  PopLocal             r0
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#7
  StoreLocal           r1
  Drop1
  Jump                 L3
L1:
  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] = ArgDesc num-args 1, num-type-args 0, names []
  [3] = ICData get target-name 'length', arg-desc CP#2
  [4] = ICData target-name '>=', arg-desc CP#0
  [5] = ICData target-name '[]', arg-desc CP#0
  [6] = ICData target-name '+', arg-desc CP#0
  [7] = ICData target-name '+', arg-desc CP#0
}
]static method test_for_break(core::List<core::int> list) → core::int {
  core::int sum = 0;
  #L1:
  for (core::int i = 0; i.{core::num::>=}(0); i = i.{core::num::+}(1)) {
    if(i.{core::num::>=}(list.{core::List::length})) {
      break #L1;
    }
    sum = sum.{core::num::+}(list.{core::List::[]}(i));
  }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              100
  InstanceCall         1, CP#1
  PopLocal             r1
L4:
  CheckStack
  Push                 r1
  Push                 FP[-5]
  InstanceCall         1, CP#2
  InstanceCall         2, CP#4
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r1
  PushInt              0
  InstanceCall         2, CP#5
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L2
  Jump                 L3
L2:
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InstanceCall         2, CP#6
  InstanceCall         2, CP#7
  PopLocal             r0
L3:
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#8
  StoreLocal           r1
  Drop1
  Jump                 L4
L1:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData target-name 'unary-', arg-desc CP#0
  [2] = ICData get target-name 'length', arg-desc CP#0
  [3] = ArgDesc num-args 2, num-type-args 0, names []
  [4] = ICData target-name '<', arg-desc CP#3
  [5] = ICData target-name '<', arg-desc CP#3
  [6] = ICData target-name '[]', arg-desc CP#3
  [7] = ICData target-name '+', arg-desc CP#3
  [8] = ICData target-name '+', arg-desc CP#3
}
]static method test_for_continue(core::List<core::int> list) → core::int {
  core::int sum = 0;
  for (core::int i = 100.{core::int::unary-}(); i.{core::num::<}(list.{core::List::length}); i = i.{core::num::+}(1))
    #L2:
    {
      if(i.{core::num::<}(0)) {
        break #L2;
      }
      sum = sum.{core::num::+}(list.{core::List::[]}(i));
    }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L2:
  CheckStack
  Push                 r1
  Push                 FP[-5]
  InstanceCall         1, CP#1
  InstanceCall         2, CP#3
  AssertBoolean        0
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  PopLocal             r2
  Push                 r2
  PushInt              1
  InstanceCall         2, CP#4
  StoreLocal           r1
  PopLocal             r3
  Push                 r2
  InstanceCall         2, CP#5
  InstanceCall         2, CP#6
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData get target-name 'length', arg-desc CP#0
  [2] = ArgDesc num-args 2, num-type-args 0, names []
  [3] = ICData target-name '<', arg-desc CP#2
  [4] = ICData target-name '+', arg-desc CP#2
  [5] = ICData target-name '[]', arg-desc CP#2
  [6] = ICData target-name '+', arg-desc CP#2
}
]static method test_while(core::List<core::int> list) → core::int {
  core::int sum = 0;
  core::int i = 0;
  while (i.{core::num::<}(list.{core::List::length})) {
    sum = sum.{core::num::+}(list.{core::List::[]}(let final core::int #t1 = i in let final core::int #t2 = i = #t1.{core::num::+}(1) in #t1));
  }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                2
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              0
  PopLocal             r1
L1:
  CheckStack
  Push                 r0
  Push                 FP[-5]
  Push                 r1
  InstanceCall         2, CP#1
  InstanceCall         2, CP#2
  PopLocal             r0
  Push                 r1
  PushInt              1
  InstanceCall         2, CP#3
  PopLocal             r1
  Push                 r1
  Push                 FP[-5]
  InstanceCall         1, CP#5
  InstanceCall         2, CP#6
  AssertBoolean        0
  PushTrue
  IfEqStrictTOS
  Jump                 L1
  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] = ArgDesc num-args 1, num-type-args 0, names []
  [5] = ICData get target-name 'length', arg-desc CP#4
  [6] = ICData target-name '<', arg-desc CP#0
}
]static method test_do_while(core::List<core::int> list) → core::int {
  core::int sum = 0;
  core::int i = 0;
  do {
    sum = sum.{core::num::+}(list.{core::List::[]}(i));
    i = i.{core::num::+}(1);
  }
  while (i.{core::num::<}(list.{core::List::length}))
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                3
  CheckStack
  PushInt              0
  PopLocal             r0
  Push                 FP[-5]
  InstanceCall         1, CP#1
  PopLocal             r1
L2:
  CheckStack
  Push                 r1
  InstanceCall         1, CP#2
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r1
  InstanceCall         1, CP#3
  PopLocal             r2
  Push                 r0
  Push                 r2
  InstanceCall         2, CP#5
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData get target-name 'iterator', arg-desc CP#0
  [2] = ICData target-name 'moveNext', arg-desc CP#0
  [3] = ICData get target-name 'current', arg-desc CP#0
  [4] = ArgDesc num-args 2, num-type-args 0, names []
  [5] = ICData target-name '+', arg-desc CP#4
}
]static method test_for_in(core::List<core::int> list) → core::int {
  core::int sum = 0;
  for (core::int e in list) {
    sum = sum.{core::num::+}(e);
  }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                4
  CheckStack
  PushInt              0
  PopLocal             r0
  PushInt              42
  PopLocal             r1
  Push                 FP[-5]
  InstanceCall         1, CP#1
  PopLocal             r2
L2:
  CheckStack
  Push                 r2
  InstanceCall         1, CP#2
  PushTrue
  IfNeStrictTOS
  Jump                 L1
  Push                 r2
  InstanceCall         1, CP#3
  PopLocal             r3
  Push                 r3
  PopLocal             r1
  Push                 r0
  Push                 r1
  InstanceCall         2, CP#5
  PopLocal             r0
  Jump                 L2
L1:
  Push                 r0
  ReturnTOS
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = ArgDesc num-args 1, num-type-args 0, names []
  [1] = ICData get target-name 'iterator', arg-desc CP#0
  [2] = ICData target-name 'moveNext', arg-desc CP#0
  [3] = ICData get target-name 'current', arg-desc CP#0
  [4] = ArgDesc num-args 2, num-type-args 0, names []
  [5] = ICData target-name '+', arg-desc CP#4
}
]static method test_for_in_with_outer_var(core::List<core::int> list) → core::int {
  core::int sum = 0;
  core::int e = 42;
  for (final core::int #t3 in list) {
    e = #t3;
    sum = sum.{core::num::+}(e);
  }
  return sum;
}
[@vm.bytecode=
Bytecode {
  Entry                0
  CheckStack
  PushNull
  ReturnTOS
}
ConstantPool {
}
]static method main() → dynamic {}
