#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  var x, a = [0,1,2,3];
  [x] = a;
"
frame size: 14
parameter count: 1
bytecode array length: 160
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   45 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(1),
  /*   60 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
                B(Star), R(6),
                B(CallProperty0), R(6), R(1), U8(3),
                B(Mov), R(1), R(5),
                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(2), U8(5),
                B(Star), R(3),
                B(LdaFalse),
                B(Star), R(7),
                B(Mov), R(context), R(10),
  /*   57 S> */ B(Ldar), R(7),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(7),
                B(CallProperty0), R(3), R(4), U8(11),
                B(Star), R(11),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1),
                B(LdaNamedProperty), R(11), U8(3), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(11), U8(4), U8(7),
                B(Star), R(11),
                B(LdaFalse),
                B(Star), R(7),
                B(Ldar), R(11),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(Star), R(0),
                B(LdaSmi), I8(-1),
                B(Star), R(9),
                B(Star), R(8),
                B(Jump), U8(7),
                B(Star), R(9),
                B(LdaZero),
                B(Star), R(8),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(10),
                B(Mov), R(context), R(12),
                B(Ldar), R(7),
                B(JumpIfToBooleanTrue), U8(27),
                B(LdaNamedProperty), R(4), U8(5), U8(13),
                B(JumpIfUndefined), U8(21),
                B(JumpIfNull), U8(19),
                B(Star), R(13),
                B(CallProperty0), R(13), R(4), U8(15),
                B(Jump), U8(2),
                B(JumpIfJSReceiver), U8(9),
                B(Star), R(13),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(13), U8(1),
                B(Jump), U8(12),
                B(Star), R(12),
                B(LdaZero),
                B(TestReferenceEqual), R(8),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(12),
                B(ReThrow),
                B(Ldar), R(10),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(8),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(9),
                B(ReThrow),
                B(LdaUndefined),
  /*   65 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  SYMBOL_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: [
  [44, 86, 94],
  [106, 135, 137],
]

---
snippet: "
  var x, y, a = [0,1,2,3];
  [,x,...y] = a;
"
frame size: 15
parameter count: 1
bytecode array length: 258
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   48 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
                B(Star), R(2),
  /*   69 S> */ B(LdaNamedProperty), R(2), U8(1), U8(1),
                B(Star), R(7),
                B(CallProperty0), R(7), R(2), U8(3),
                B(Mov), R(2), R(6),
                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(2), U8(5),
                B(Star), R(4),
                B(LdaFalse),
                B(Star), R(8),
                B(Mov), R(context), R(11),
                B(Ldar), R(8),
                B(JumpIfToBooleanTrue), U8(35),
                B(LdaTrue),
                B(Star), R(8),
                B(CallProperty0), R(4), R(5), U8(11),
                B(Star), R(12),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(LdaNamedProperty), R(12), U8(3), U8(9),
                B(JumpIfToBooleanTrue), U8(13),
                B(LdaNamedProperty), R(12), U8(4), U8(7),
                B(Star), R(12),
                B(LdaFalse),
                B(Star), R(8),
                B(Ldar), R(12),
  /*   61 S> */ B(Ldar), R(8),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(8),
                B(CallProperty0), R(4), R(5), U8(13),
                B(Star), R(12),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(LdaNamedProperty), R(12), U8(3), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(12), U8(4), U8(7),
                B(Star), R(12),
                B(LdaFalse),
                B(Star), R(8),
                B(Ldar), R(12),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(Star), R(0),
  /*   63 S> */ B(CreateEmptyArrayLiteral), U8(15),
                B(Star), R(13),
                B(LdaZero),
                B(Star), R(14),
                B(LdaTrue),
                B(Star), R(8),
                B(CallProperty0), R(4), R(5), U8(19),
                B(Star), R(12),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(LdaNamedProperty), R(12), U8(3), U8(21),
                B(JumpIfToBooleanTrue), U8(29),
                B(LdaNamedProperty), R(12), U8(4), U8(7),
                B(Star), R(12),
                B(LdaFalse),
                B(Star), R(8),
                B(Ldar), R(12),
                B(StaInArrayLiteral), R(13), R(14), U8(16),
                B(Ldar), R(14),
                B(Inc), U8(18),
                B(Star), R(14),
                B(JumpLoop), U8(43), I8(0),
                B(LdaTrue),
                B(Star), R(8),
                B(Mov), R(13), R(1),
                B(Ldar), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(10),
                B(Star), R(9),
                B(Jump), U8(7),
                B(Star), R(10),
                B(LdaZero),
                B(Star), R(9),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(11),
                B(Mov), R(context), R(13),
                B(Ldar), R(8),
                B(JumpIfToBooleanTrue), U8(27),
                B(LdaNamedProperty), R(5), U8(5), U8(23),
                B(JumpIfUndefined), U8(21),
                B(JumpIfNull), U8(19),
                B(Star), R(14),
                B(CallProperty0), R(14), R(5), U8(25),
                B(Jump), U8(2),
                B(JumpIfJSReceiver), U8(9),
                B(Star), R(14),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(14), U8(1),
                B(Jump), U8(12),
                B(Star), R(13),
                B(LdaZero),
                B(TestReferenceEqual), R(9),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(13),
                B(ReThrow),
                B(Ldar), R(11),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(9),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(10),
                B(ReThrow),
                B(LdaUndefined),
  /*   74 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  SYMBOL_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: [
  [44, 184, 192],
  [204, 233, 235],
]

---
snippet: "
  var x={}, y, a = [0];
  [x.foo,y=4] = a;
"
frame size: 16
parameter count: 1
bytecode array length: 211
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   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(LdaNamedProperty), R(2), U8(1), U8(1),
                B(Star), R(7),
                B(CallProperty0), R(7), R(2), U8(3),
                B(Mov), R(2), R(6),
                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(2), U8(5),
                B(Star), R(4),
                B(LdaFalse),
                B(Star), R(8),
                B(Mov), R(context), R(11),
  /*   59 S> */ B(Ldar), R(8),
                B(Mov), R(0), R(13),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(8),
                B(CallProperty0), R(4), R(5), U8(11),
                B(Star), R(12),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(LdaNamedProperty), R(12), U8(3), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(12), U8(4), U8(7),
                B(Star), R(12),
                B(LdaFalse),
                B(Star), R(8),
                B(Ldar), R(12),
                B(Jump), U8(3),
                B(LdaUndefined),
                B(StaNamedProperty), R(13), U8(5), U8(13),
  /*   63 S> */ B(Ldar), R(8),
                B(JumpIfToBooleanTrue), U8(37),
                B(LdaTrue),
                B(Star), R(8),
                B(CallProperty0), R(4), R(5), U8(15),
                B(Star), R(12),
                B(JumpIfJSReceiver), U8(7),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1),
                B(LdaNamedProperty), R(12), U8(3), U8(9),
                B(JumpIfToBooleanTrue), U8(15),
                B(LdaNamedProperty), R(12), U8(4), U8(7),
                B(Star), R(12),
                B(LdaFalse),
                B(Star), R(8),
                B(Ldar), R(12),
                B(JumpIfNotUndefined), U8(4),
                B(LdaSmi), I8(4),
                B(Star), R(1),
                B(LdaSmi), I8(-1),
                B(Star), R(10),
                B(Star), R(9),
                B(Jump), U8(7),
                B(Star), R(10),
                B(LdaZero),
                B(Star), R(9),
                B(LdaTheHole),
                B(SetPendingMessage),
                B(Star), R(11),
                B(Mov), R(context), R(14),
                B(Ldar), R(8),
                B(JumpIfToBooleanTrue), U8(27),
                B(LdaNamedProperty), R(5), U8(6), U8(17),
                B(JumpIfUndefined), U8(21),
                B(JumpIfNull), U8(19),
                B(Star), R(15),
                B(CallProperty0), R(15), R(5), U8(19),
                B(Jump), U8(2),
                B(JumpIfJSReceiver), U8(9),
                B(Star), R(15),
                B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(15), U8(1),
                B(Jump), U8(12),
                B(Star), R(14),
                B(LdaZero),
                B(TestReferenceEqual), R(9),
                B(JumpIfTrue), U8(5),
                B(Ldar), R(14),
                B(ReThrow),
                B(Ldar), R(11),
                B(SetPendingMessage),
                B(LdaZero),
                B(TestReferenceEqual), R(9),
                B(JumpIfFalse), U8(5),
                B(Ldar), R(10),
                B(ReThrow),
                B(LdaUndefined),
  /*   73 S> */ B(Return),
]
constant pool: [
  ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
  SYMBOL_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: [
  [47, 137, 145],
  [157, 186, 188],
]

---
snippet: "
  var x, a = {x:1};
  ({x} = a);
"
frame size: 5
parameter count: 1
bytecode array length: 35
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   45 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   52 S> */ B(JumpIfNull), U8(4),
                B(JumpIfNotUndefined), U8(16),
                B(LdaSmi), I8(81),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
  /*   54 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
                B(Throw),
                B(Star), R(4),
  /*   54 S> */ B(LdaNamedProperty), R(4), 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: 5
parameter count: 1
bytecode array length: 40
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   40 S> */ B(CreateEmptyObjectLiteral),
                B(Star), R(0),
  /*   48 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   55 S> */ B(JumpIfNull), U8(4),
                B(JumpIfNotUndefined), U8(16),
                B(LdaSmi), I8(81),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
  /*   57 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
                B(Throw),
  /*   61 S> */ B(Star), R(4),
                B(LdaNamedProperty), R(4), 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: 6
parameter count: 1
bytecode array length: 50
bytecodes: [
  /*   30 E> */ B(StackCheck),
  /*   45 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41),
                B(Star), R(1),
  /*   62 S> */ B(JumpIfNull), U8(4),
                B(JumpIfNotUndefined), U8(16),
                B(LdaSmi), I8(81),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
  /*   64 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
                B(Throw),
                B(Star), R(4),
  /*   64 S> */ B(LdaConstant), U8(1),
                B(Star), R(5),
                B(LdaNamedProperty), R(4), U8(1), U8(1),
                B(JumpIfNotUndefined), U8(3),
                B(LdaZero),
                B(Star), R(0),
  /*   71 S> */ B(CallRuntime), U16(Runtime::kCopyDataPropertiesWithExcludedProperties), R(4), 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: [
]

