#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes
private methods: yes

---
snippet: "
  {
    class A {
      static #a() { return 1; }
    }
  }
"
frame size: 6
parameter count: 1
bytecode array length: 40
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(CreateClosure), U8(3), U8(1), U8(2),
                B(StaCurrentContextSlot), U8(2),
                B(PopContext), R(1),
                B(Mov), R(4), R(0),
                B(LdaUndefined),
  /*   84 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  {
    class A {
      static get #a() { return 1; }
    }
  }
"
frame size: 6
parameter count: 1
bytecode array length: 50
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(CreateClosure), U8(3), U8(1), U8(2),
                B(Star), R(4),
                B(LdaNull),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(4), U8(2),
                B(StaCurrentContextSlot), U8(2),
                B(PopContext), R(1),
                B(Mov), R(2), R(0),
                B(LdaUndefined),
  /*   88 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  {
    class A {
      static set #a(val) { }
    }
  }
"
frame size: 6
parameter count: 1
bytecode array length: 50
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(LdaNull),
                B(Star), R(4),
                B(CreateClosure), U8(3), U8(1), U8(2),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(4), U8(2),
                B(StaCurrentContextSlot), U8(2),
                B(PopContext), R(1),
                B(Mov), R(2), R(0),
                B(LdaUndefined),
  /*   81 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  {
    class A {
      static get #a() { return 1; }
      static set #a(val) { }
    }
  }
"
frame size: 6
parameter count: 1
bytecode array length: 53
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(1),
                B(LdaTheHole),
                B(Star), R(5),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(3),
                B(Mov), R(2), R(4),
                B(CallRuntime), U16(Runtime::kDefineClass), R(3), U8(3),
                B(Star), R(3),
                B(CreateClosure), U8(3), U8(1), U8(2),
                B(Star), R(4),
                B(CreateClosure), U8(4), U8(2), U8(2),
                B(Star), R(5),
                B(CallRuntime), U16(Runtime::kCreatePrivateAccessors), R(4), U8(2),
                B(StaCurrentContextSlot), U8(2),
                B(PopContext), R(1),
                B(Mov), R(2), R(0),
                B(LdaUndefined),
  /*  115 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  {
    class A {
      static #a() { }
      #b() { }
    }
  }
"
frame size: 7
parameter count: 1
bytecode array length: 57
bytecodes: [
  /*   30 E> */ B(CreateBlockContext), U8(0),
                B(PushContext), R(1),
                B(LdaConstant), U8(2),
                B(Star), R(3),
                B(CallRuntime), U16(Runtime::kCreatePrivateBrandSymbol), R(3), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(LdaTheHole),
                B(Star), R(6),
                B(CreateClosure), U8(3), U8(0), U8(2),
                B(Star), R(2),
                B(LdaConstant), U8(1),
                B(Star), R(4),
                B(Mov), R(2), R(5),
                B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(3),
                B(Star), R(4),
                B(CreateClosure), U8(4), U8(1), U8(2),
                B(StaCurrentContextSlot), U8(2),
                B(CreateClosure), U8(5), U8(2), U8(2),
                B(StaCurrentContextSlot), U8(3),
                B(PopContext), R(1),
                B(Mov), R(5), R(0),
                B(LdaUndefined),
  /*   87 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["A"],
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

