#
# Autogenerated by generate-bytecode-expectations.
#

---
pool type: mixed
execute: yes
wrap: yes

---
snippet: "
  class Person {
    constructor(name) { this.name = name; }
    speak() { console.log(this.name + ' is speaking.'); }
  }
"
frame size: 9
parameter count: 1
bytecode array length: 73
bytecodes: [
  B(LdaTheHole),
  B(Star), R(1),
  B(StackCheck),
  B(LdaTheHole),
  B(Star), R(0),
  B(LdaTheHole),
  B(Star), R(2),
  B(CreateClosure), U8(0), U8(0),
  B(Star), R(3),
  B(LdaSmi), U8(34),
  B(Star), R(4),
  B(Wide), B(LdaSmi), U16(148),
  B(Star), R(5),
  B(CallRuntime), U16(Runtime::kDefineClass), R(2), U8(4),
  B(Star), R(2),
  B(LoadIC), R(2), U8(1), U8(1),
  B(Star), R(3),
  B(Mov), R(3), R(4),
  B(LdaConstant), U8(2),
  B(Star), R(5),
  B(CreateClosure), U8(3), U8(0),
  B(Star), R(6),
  B(LdaSmi), U8(2),
  B(Star), R(7),
  B(LdaZero),
  B(Star), R(8),
  B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(4), U8(5),
  B(CallRuntime), U16(Runtime::kFinalizeClassDefinition), R(2), U8(2),
  B(Star), R(0),
  B(Star), R(1),
  B(LdaUndefined),
  B(Return),
]
constant pool: [
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  class person {
    constructor(name) { this.name = name; }
    speak() { console.log(this.name + ' is speaking.'); }
  }
"
frame size: 9
parameter count: 1
bytecode array length: 73
bytecodes: [
  B(LdaTheHole),
  B(Star), R(1),
  B(StackCheck),
  B(LdaTheHole),
  B(Star), R(0),
  B(LdaTheHole),
  B(Star), R(2),
  B(CreateClosure), U8(0), U8(0),
  B(Star), R(3),
  B(LdaSmi), U8(34),
  B(Star), R(4),
  B(Wide), B(LdaSmi), U16(148),
  B(Star), R(5),
  B(CallRuntime), U16(Runtime::kDefineClass), R(2), U8(4),
  B(Star), R(2),
  B(LoadIC), R(2), U8(1), U8(1),
  B(Star), R(3),
  B(Mov), R(3), R(4),
  B(LdaConstant), U8(2),
  B(Star), R(5),
  B(CreateClosure), U8(3), U8(0),
  B(Star), R(6),
  B(LdaSmi), U8(2),
  B(Star), R(7),
  B(LdaZero),
  B(Star), R(8),
  B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(4), U8(5),
  B(CallRuntime), U16(Runtime::kFinalizeClassDefinition), R(2), U8(2),
  B(Star), R(0),
  B(Star), R(1),
  B(LdaUndefined),
  B(Return),
]
constant pool: [
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  var n0 = 'a';
  var n1 = 'b';
  class N {
    [n0]() { return n0; }
    static [n1]() { return n1; }
  }
"
frame size: 10
parameter count: 1
bytecode array length: 127
bytecodes: [
  B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
  B(PushContext), R(2),
  B(LdaTheHole),
  B(Star), R(1),
  B(StackCheck),
  B(LdaConstant), U8(0),
  B(StaContextSlot), R(context), U8(4),
  B(LdaConstant), U8(1),
  B(StaContextSlot), R(context), U8(5),
  B(LdaTheHole),
  B(Star), R(0),
  B(LdaTheHole),
  B(Star), R(3),
  B(CreateClosure), U8(2), U8(0),
  B(Star), R(4),
  B(LdaSmi), U8(62),
  B(Star), R(5),
  B(Wide), B(LdaSmi), U16(128),
  B(Star), R(6),
  B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
  B(Star), R(3),
  B(LoadIC), R(3), U8(3), U8(1),
  B(Star), R(4),
  B(Mov), R(4), R(5),
  B(LdaContextSlot), R(context), U8(4),
  B(ToName),
  B(Star), R(6),
  B(CreateClosure), U8(4), U8(0),
  B(Star), R(7),
  B(LdaSmi), U8(2),
  B(Star), R(8),
  B(LdaSmi), U8(1),
  B(Star), R(9),
  B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(5), U8(5),
  B(Mov), R(3), R(5),
  B(LdaContextSlot), R(context), U8(5),
  B(ToName),
  B(Star), R(6),
  B(LdaConstant), U8(3),
  B(TestEqualStrict), R(6),
  B(JumpIfFalse), U8(7),
  B(CallRuntime), U16(Runtime::kThrowStaticPrototypeError), R(0), U8(0),
  B(CreateClosure), U8(5), U8(0),
  B(Star), R(7),
  B(LdaSmi), U8(1),
  B(Star), R(9),
  B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(5), U8(5),
  B(CallRuntime), U16(Runtime::kFinalizeClassDefinition), R(3), U8(2),
  B(Star), R(0),
  B(Star), R(1),
  B(LdaUndefined),
  B(Return),
]
constant pool: [
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  var count = 0;
  class C { constructor() { count++; }}
  return new C();
"
frame size: 10
parameter count: 1
bytecode array length: 74
bytecodes: [
  B(CallRuntime), U16(Runtime::kNewFunctionContext), R(closure), U8(1),
  B(PushContext), R(2),
  B(LdaTheHole),
  B(Star), R(1),
  B(StackCheck),
  B(LdaZero),
  B(StaContextSlot), R(context), U8(4),
  B(LdaTheHole),
  B(Star), R(0),
  B(LdaTheHole),
  B(Star), R(3),
  B(CreateClosure), U8(0), U8(0),
  B(Star), R(4),
  B(LdaSmi), U8(49),
  B(Star), R(5),
  B(LdaSmi), U8(86),
  B(Star), R(6),
  B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(4),
  B(Star), R(3),
  B(LoadIC), R(3), U8(1), U8(1),
  B(Star), R(4),
  B(CallRuntime), U16(Runtime::kFinalizeClassDefinition), R(3), U8(2),
  B(Star), R(0),
  B(Star), R(1),
  B(JumpIfNotHole), U8(11),
  B(LdaConstant), U8(2),
  B(Star), R(4),
  B(CallRuntime), U16(Runtime::kThrowReferenceError), R(4), U8(1),
  B(Star), R(3),
  B(New), R(3), R(0), U8(0),
  B(Return),
]
constant pool: [
  InstanceType::SHARED_FUNCTION_INFO_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
  InstanceType::ONE_BYTE_INTERNALIZED_STRING_TYPE,
]
handlers: [
]

