#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var x, a = [0,1,2,3];
  [x] = a;
"
frame size: 13
parameter count: 1
bytecode array length: 146
bytecodes: [
  /*   45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(1),
  /*   60 S> */ B(GetIterator), R(1), U8(1), U8(3),
                B(Mov), R(1), R(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(5),
                B(Star), R(3),
                B(LdaFalse),
                B(Star), R(5),
                B(Mov), R(context), R(8),
  /*   57 S> */ B(Ldar), R(5),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(5),
                B(CallProperty0), R(3), R(4), U8(11),
                B(Star), R(9),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
                B(LdaNamedProperty), R(9), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(9), U8(3), U8(7),
                B(Star), R(9),
                B(LdaFalse),
                B(Star), R(5),
                B(Ldar), R(9),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(Star), R(0),
                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(13),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(11),
                B(CallProperty0), R(11), R(4), U8(15),
                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(LdaZero),
                B(TestReferenceEqual), R(6),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(7),
                B(ReThrow),
                B(LdaUndefined),
  /*   65 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: [
  [34, 76, 84],
  [100, 121, 123],
]

---
snippet: "
  var x, y, a = [0,1,2,3];
  [,x,...y] = a;
"
frame size: 14
parameter count: 1
bytecode array length: 236
bytecodes: [
  /*   48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(2),
  /*   69 S> */ B(GetIterator), R(2), U8(1), U8(3),
                B(Mov), R(2), R(3),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(5),
                B(LdaNamedProperty), R(5), U8(1), U8(5),
                B(Star), R(4),
                B(LdaFalse),
                B(Star), R(6),
                B(Mov), R(context), R(9),
                B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(35),
                B(LdaTrue),
                B(Star), R(6),
                B(CallProperty0), R(4), R(5), U8(11),
                B(Star), R(10),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
                B(LdaNamedProperty), R(10), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(13),
                B(LdaNamedProperty), R(10), U8(3), U8(7),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(6),
                B(Ldar), R(10),
  /*   61 S> */ B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(6),
                B(CallProperty0), R(4), R(5), U8(13),
                B(Star), R(10),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
                B(LdaNamedProperty), R(10), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(10), U8(3), U8(7),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(6),
                B(Ldar), R(10),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(Star), R(0),
  /*   63 S> */ B(CreateEmptyArrayLiteral), U8(15),
                B(Star), R(11),
                B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(44),
                B(LdaZero),
                B(Star), R(12),
                B(LdaTrue),
                B(Star), R(6),
                B(CallProperty0), R(4), R(5), U8(19),
                B(Star), R(10),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
                B(LdaNamedProperty), R(10), U8(2), U8(21),
                B(JumpIfToBooleanTrue), U8(19),
                B(LdaNamedProperty), R(10), U8(3), U8(7),
                B(StaInArrayLiteral), R(11), R(12), U8(16),
                B(Ldar), R(12),
                B(Inc), U8(18),
                B(Star), R(12),
                B(JumpLoop), U8(33), I8(0),
                B(Mov), R(11), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(8),
                B(Star), R(7),
                B(Jump), U8(7),
                B(Star), R(8),
                B(LdaZero),
                B(Star), R(7),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(9),
                B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(11),
                B(LdaNamedProperty), R(5), U8(4), U8(23),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(12),
                B(CallProperty0), R(12), R(5), U8(25),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(13),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(13), U8(1),
                B(Jump), U8(12),
                B(Star), R(11),
                B(LdaZero),
                B(TestReferenceEqual), R(7),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(11),
                B(ReThrow),
                B(Ldar), R(9),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(7),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(8),
                B(ReThrow),
                B(LdaUndefined),
  /*   74 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: [
  [34, 166, 174],
  [190, 211, 213],
]

---
snippet: "
  var x={}, y, a = [0];
  [x.foo,y=4] = a;
"
frame size: 15
parameter count: 1
bytecode array length: 197
bytecodes: [
  /*   40 S> */ B(CreateEmptyObjectLiteral),
                B(Star), R(0),
  /*   51 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(2),
  /*   68 S> */ B(GetIterator), R(2), U8(1), U8(3),
                B(Mov), R(2), R(3),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
                B(Star), R(5),
                B(LdaNamedProperty), R(5), U8(1), U8(5),
                B(Star), R(4),
                B(LdaFalse),
                B(Star), R(6),
                B(Mov), R(context), R(9),
  /*   59 S> */ B(Ldar), R(6),
                B(Mov), R(0), R(11),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(6),
                B(CallProperty0), R(4), R(5), U8(11),
                B(Star), R(10),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
                B(LdaNamedProperty), R(10), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(10), U8(3), U8(7),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(6),
                B(Ldar), R(10),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(StaNamedProperty), R(11), U8(4), U8(13),
  /*   63 S> */ B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(6),
                B(CallProperty0), R(4), R(5), U8(15),
                B(Star), R(10),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
                B(LdaNamedProperty), R(10), U8(2), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(10), U8(3), U8(7),
                B(Star), R(10),
                B(LdaFalse),
                B(Star), R(6),
                B(Ldar), R(10),
                B(JumpIfNotUndefined), U8(4),
                B(LdaSmi), I8(4),
                B(Star), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(8),
                B(Star), R(7),
                B(Jump), U8(7),
                B(Star), R(8),
                B(LdaZero),
                B(Star), R(7),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(9),
                B(Ldar), R(6),
                B(JumpIfToBooleanTrue), U8(38),
                B(Mov), R(context), R(12),
                B(LdaNamedProperty), R(5), U8(5), U8(17),
                B(JumpIfUndefinedOrNull), U8(29),
                B(Star), R(13),
                B(CallProperty0), R(13), R(5), U8(19),
                B(JumpIfJSReceiver), U8(21),
                B(Star), R(14),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(14), U8(1),
                B(Jump), U8(12),
                B(Star), R(12),
                B(LdaZero),
                B(TestReferenceEqual), R(7),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(12),
                B(ReThrow),
                B(Ldar), R(9),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(7),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(8),
                B(ReThrow),
                B(LdaUndefined),
  /*   73 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 ["foo"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
]
handlers: [
  [37, 127, 135],
  [151, 172, 174],
]

---
snippet: "
  var x, a = {x:1};
  ({x} = a);
"
frame size: 2
parameter count: 1
bytecode array length: 14
bytecodes: [
  /*   45 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
                B(Star), R(0),
                B(LdaUndefined),
  /*   63 S> */ B(Return),
]
constant pool: [
  OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
]
handlers: [
]

---
snippet: "
  var x={}, a = {y:1};
  ({y:x.foo} = a);
"
frame size: 2
parameter count: 1
bytecode array length: 19
bytecodes: [
  /*   40 S> */ B(CreateEmptyObjectLiteral),
                B(Star), R(0),
  /*   48 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   61 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
                B(StaNamedProperty), R(0), U8(2), U8(3),
                B(LdaUndefined),
  /*   72 S> */ B(Return),
]
constant pool: [
  OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["y"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["foo"],
]
handlers: [
]

---
snippet: "
  var x, a = {y:1, w:2, v:3};
  ({x=0,...y} = a);
"
frame size: 4
parameter count: 1
bytecode array length: 32
bytecodes: [
  /*   45 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   64 S> */ B(LdaConstant), U8(1),
                B(Star), R(3),
                B(LdaNamedProperty), R(1), U8(1), U8(1),
                B(Mov), R(1), R(2),
                B(JumpIfNotUndefined), U8(3),
                B(LdaZero),
                B(Star), R(0),
  /*   71 S> */ B(CallRuntime), U16(Runtime::kCopyDataPropertiesWithExcludedProperties), R(2), U8(2),
                B(StaGlobal), U8(2), U8(3),
                B(LdaUndefined),
  /*   80 S> */ B(Return),
]
constant pool: [
  OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["y"],
]
handlers: [
]

