#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  for (var p of [0, 1, 2]) {}
"
frame size: 12
parameter count: 1
bytecode array length: 143
bytecodes: [
  /*   48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(4),
                B(GetIterator), R(4), U8(1), U8(3),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(3),
                B(LdaNamedProperty), R(3), U8(1), U8(5),
                B(Star), R(2),
                B(LdaFalse),
                B(Star), R(4),
                B(Mov), R(context), R(7),
                B(LdaTrue),
                B(Star), R(4),
  /*   43 S> */ B(CallProperty0), R(2), R(3), U8(7),
                B(Star), R(8),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(8), U8(1),
                B(LdaNamedProperty), R(8), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(22),
                B(LdaNamedProperty), R(8), U8(3), U8(11),
                B(Star), R(8),
                B(LdaFalse),
                B(Star), R(4),
                B(Mov), R(8), R(1),
  /*   43 S> */ B(Mov), R(1), R(0),
                B(Ldar), R(8),
  /*   34 E> */ B(JumpLoop), U8(39), I8(0),
                B(LdaSmi), I8(-1),
                B(Star), R(6),
                B(Star), R(5),
                B(Jump), U8(7),
                B(Star), R(6),
                B(LdaZero),
                B(Star), R(5),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(7),
                B(Ldar), R(4),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(9),
                B(LdaNamedProperty), R(3), U8(4), U8(13),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(10),
                B(CallProperty0), R(10), R(3), U8(15),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
                B(Jump), U8(12),
                B(Star), R(9),
                B(LdaZero),
                B(TestReferenceEqual), R(5),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(9),
                B(ReThrow),
                B(Ldar), R(7),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(5),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(6),
                B(ReThrow),
                B(LdaUndefined),
  /*   62 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
]
handlers: [
  [31, 73, 81],
  [97, 118, 120],
]

---
snippet: "
  var x = 'potatoes';
  for (var p of x) { return p; }
"
frame size: 13
parameter count: 1
bytecode array length: 151
bytecodes: [
  /*   42 S> */ B(LdaConstant), U8(0),
                B(Star), R(0),
  /*   68 S> */ B(GetIterator), R(0), U8(0), U8(2),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(4),
                B(LdaNamedProperty), R(4), U8(1), U8(4),
                B(Star), R(3),
                B(LdaFalse),
                B(Star), R(5),
                B(Mov), R(context), R(8),
                B(LdaTrue),
                B(Star), R(5),
  /*   63 S> */ B(CallProperty0), R(3), R(4), U8(6),
                B(Star), R(9),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
                B(LdaNamedProperty), R(9), U8(2), U8(8),
                B(JumpIfToBooleanTrue), U8(26),
                B(LdaNamedProperty), R(9), U8(3), U8(10),
                B(Star), R(9),
                B(LdaFalse),
                B(Star), R(5),
                B(Mov), R(9), R(2),
  /*   63 S> */ B(Mov), R(2), R(1),
  /*   73 S> */ B(LdaSmi), I8(1),
                B(Mov), R(9), R(7),
                B(Star), R(6),
                B(Jump), U8(15),
                B(LdaSmi), I8(-1),
                B(Star), R(7),
                B(Star), R(6),
                B(Jump), U8(7),
                B(Star), R(7),
                B(LdaZero),
                B(Star), R(6),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(8),
                B(Ldar), R(5),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(10),
                B(LdaNamedProperty), R(4), U8(4), U8(12),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(11),
                B(CallProperty0), R(11), R(4), U8(14),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(12),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(Jump), U8(12),
                B(Star), R(10),
                B(LdaZero),
                B(TestReferenceEqual), R(6),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(10),
                B(ReThrow),
                B(Ldar), R(8),
                B(SetPendingMessage),
                B(Ldar), R(6),
                B(SwitchOnSmiNoFeedback), U8(5), U8(2), I8(0),
                B(Jump), U8(8),
                B(Ldar), R(7),
                B(ReThrow),
                B(Ldar), R(7),
  /*   85 S> */ B(Return),
                B(LdaUndefined),
  /*   85 S> */ B(Return),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["potatoes"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
  Smi [6],
  Smi [9],
]
handlers: [
  [29, 75, 83],
  [99, 120, 122],
]

---
snippet: "
  for (var x of [10, 20, 30]) {
    if (x == 10) continue;
    if (x == 20) break;
  }
"
frame size: 12
parameter count: 1
bytecode array length: 159
bytecodes: [
  /*   48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(4),
                B(GetIterator), R(4), U8(1), U8(3),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(3),
                B(LdaNamedProperty), R(3), U8(1), U8(5),
                B(Star), R(2),
                B(LdaFalse),
                B(Star), R(4),
                B(Mov), R(context), R(7),
                B(LdaTrue),
                B(Star), R(4),
  /*   43 S> */ B(CallProperty0), R(2), R(3), U8(7),
                B(Star), R(8),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(8), U8(1),
                B(LdaNamedProperty), R(8), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(38),
                B(LdaNamedProperty), R(8), U8(3), U8(11),
                B(Star), R(8),
                B(LdaFalse),
                B(Star), R(4),
                B(Mov), R(8), R(1),
  /*   43 S> */ B(Mov), R(1), R(0),
  /*   66 S> */ B(LdaSmi), I8(10),
  /*   72 E> */ B(TestEqual), R(0), U8(13),
                B(JumpIfFalse), U8(4),
  /*   79 S> */ B(Jump), U8(11),
  /*   91 S> */ B(LdaSmi), I8(20),
  /*   97 E> */ B(TestEqual), R(0), U8(14),
                B(JumpIfFalse), U8(4),
  /*  104 S> */ B(Jump), U8(5),
  /*   34 E> */ B(JumpLoop), U8(55), I8(0),
                B(LdaSmi), I8(-1),
                B(Star), R(6),
                B(Star), R(5),
                B(Jump), U8(7),
                B(Star), R(6),
                B(LdaZero),
                B(Star), R(5),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(7),
                B(Ldar), R(4),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(9),
                B(LdaNamedProperty), R(3), U8(4), U8(15),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(10),
                B(CallProperty0), R(10), R(3), U8(17),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
                B(Jump), U8(12),
                B(Star), R(9),
                B(LdaZero),
                B(TestReferenceEqual), R(5),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(9),
                B(ReThrow),
                B(Ldar), R(7),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(5),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(6),
                B(ReThrow),
                B(LdaUndefined),
  /*  113 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
]
handlers: [
  [31, 89, 97],
  [113, 134, 136],
]

---
snippet: "
  var x = { 'a': 1, 'b': 2 };
  for (x['a'] of [1,2,3]) { return x['a']; }
"
frame size: 12
parameter count: 1
bytecode array length: 165
bytecodes: [
  /*   42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(0),
  /*   77 S> */ B(CreateArrayLiteral), U8(1), U8(1), U8(37),
                B(Star), R(3),
                B(GetIterator), R(3), U8(2), U8(4),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(2),
                B(LdaNamedProperty), R(2), U8(2), U8(6),
                B(Star), R(1),
                B(LdaFalse),
                B(Star), R(3),
                B(Mov), R(context), R(6),
                B(LdaTrue),
                B(Star), R(3),
  /*   68 S> */ B(CallProperty0), R(1), R(2), U8(8),
                B(Star), R(7),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
                B(LdaNamedProperty), R(7), U8(3), U8(10),
                B(JumpIfToBooleanTrue), U8(32),
                B(LdaNamedProperty), R(7), U8(4), U8(12),
                B(Star), R(7),
                B(LdaFalse),
                B(Star), R(3),
                B(Ldar), R(7),
  /*   67 E> */ B(StaNamedProperty), R(0), U8(5), U8(14),
  /*   96 S> */ B(LdaNamedProperty), R(0), U8(5), U8(16),
                B(Star), R(5),
                B(LdaSmi), I8(1),
                B(Star), R(4),
                B(Mov), R(0), R(8),
                B(Jump), U8(15),
                B(LdaSmi), I8(-1),
                B(Star), R(5),
                B(Star), R(4),
                B(Jump), U8(7),
                B(Star), R(5),
                B(LdaZero),
                B(Star), R(4),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(6),
                B(Ldar), R(3),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(9),
                B(LdaNamedProperty), R(2), U8(6), U8(18),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(10),
                B(CallProperty0), R(10), R(2), U8(20),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
                B(Jump), U8(12),
                B(Star), R(9),
                B(LdaZero),
                B(TestReferenceEqual), R(4),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(9),
                B(ReThrow),
                B(Ldar), R(6),
                B(SetPendingMessage),
                B(Ldar), R(4),
                B(SwitchOnSmiNoFeedback), U8(7), U8(2), I8(0),
                B(Jump), U8(8),
                B(Ldar), R(5),
                B(ReThrow),
                B(Ldar), R(5),
  /*  105 S> */ B(Return),
                B(LdaUndefined),
  /*  105 S> */ B(Return),
]
constant pool: [
  OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["a"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
  Smi [6],
  Smi [9],
]
handlers: [
  [37, 89, 97],
  [113, 134, 136],
]

