#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  class A { constructor(...args) { this.args = args; } }
  new A(...[1, 2, 3]);
"
frame size: 6
parameter count: 1
bytecode array length: 45
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(0),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(Mov), R(4), R(0),
                B(Mov), R(0), R(1),
  /*   89 S> */ B(CreateArrayLiteral), U8(2), U8(1), U8(37),
                B(Star), R(3),
                B(Ldar), R(1),
  /*   89 E> */ B(ConstructWithSpread), R(2), R(3), U8(1), U8(2),
                B(LdaUndefined),
  /*  110 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  TUPLE2_TYPE,
]
handlers: [
]

---
snippet: "
  class A { constructor(...args) { this.args = args; } }
  new A(0, ...[1, 2, 3]);
"
frame size: 6
parameter count: 1
bytecode array length: 48
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(0),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(Mov), R(4), R(0),
                B(Mov), R(0), R(1),
  /*   89 S> */ B(LdaZero),
                B(Star), R(3),
                B(CreateArrayLiteral), U8(2), U8(1), U8(37),
                B(Star), R(4),
                B(Ldar), R(1),
  /*   89 E> */ B(ConstructWithSpread), R(2), R(3), U8(2), U8(2),
                B(LdaUndefined),
  /*  113 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  TUPLE2_TYPE,
]
handlers: [
]

---
snippet: "
  class A { constructor(...args) { this.args = args; } }
  new A(0, ...[1, 2, 3], 4);
"
frame size: 6
parameter count: 1
bytecode array length: 66
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(0),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(Mov), R(4), R(0),
                B(Mov), R(0), R(1),
  /*   89 S> */ B(CreateArrayLiteral), U8(2), U8(1), U8(37),
                B(Star), R(3),
                B(CreateArrayLiteral), U8(3), U8(2), U8(37),
                B(Star), R(4),
                B(CallJSRuntime), U8(%spread_iterable), R(4), U8(1),
                B(Star), R(4),
                B(CreateArrayLiteral), U8(4), U8(3), U8(37),
                B(Star), R(5),
                B(CallJSRuntime), U8(%spread_arguments), R(3), U8(3),
                B(Star), R(3),
                B(CallJSRuntime), U8(%reflect_construct), R(2), U8(2),
                B(LdaUndefined),
  /*  116 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  TUPLE2_TYPE,
  TUPLE2_TYPE,
  TUPLE2_TYPE,
]
handlers: [
]

