#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  {
    class A {
      #a;
      constructor() {
        this.#a = 1;
      }
    }
  
    class B {
      #a = 1;
    }
    new A;
    new B;
  }
"
frame size: 10
parameter count: 1
bytecode array length: 137
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(4),
                B(LdaTheHole),
                B(Star), R(8),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(5),
                B(LdaConstant), U8(1),
                B(Star), R(6),
                B(LdaConstant), U8(3),
                B(Star), R(9),
                B(LdaConstant), U8(3),
                B(Star), R(9),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(9), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(Mov), R(5), R(7),
                B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
                B(Star), R(6),
                B(Mov), R(7), R(3),
                B(CreateClosure), U8(4), U8(1), U8(2),
                B(Star), R(7),
                B(StaNamedProperty), R(5), U8(5), U8(0),
                B(PopContext), R(4),
                B(Mov), R(3), R(0),
  /*   38 E> */ B(CreateBlockContext), U8(6),
                B(PushContext), R(4),
                B(LdaTheHole),
                B(Star), R(8),
                B(CreateClosure), U8(8), U8(2), U8(2),
                B(Star), R(5),
                B(LdaConstant), U8(7),
                B(Star), R(6),
                B(LdaConstant), U8(3),
                B(Star), R(9),
                B(LdaConstant), U8(3),
                B(Star), R(9),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(9), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(Mov), R(5), R(7),
                B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
                B(Star), R(6),
                B(Mov), R(7), R(2),
                B(CreateClosure), U8(9), U8(3), U8(2),
                B(Star), R(7),
                B(StaNamedProperty), R(5), U8(5), U8(2),
                B(PopContext), R(4),
                B(Mov), R(2), R(1),
  /*  136 S> */ B(Ldar), R(3),
  /*  136 E> */ B(Construct), R(3), R(0), U8(0), U8(4),
  /*  145 S> */ B(Ldar), R(2),
  /*  145 E> */ B(Construct), R(2), R(0), U8(0), U8(6),
                B(LdaUndefined),
  /*  154 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#a"],
  SHARED_FUNCTION_INFO_TYPE,
  SYMBOL_TYPE,
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

---
snippet: "
  {
    class A extends class {} {
      #a;
      constructor() {
        super();
        this.#a = 1;
      }
    }
  
    class B extends class {} {
      #a = 1;
      #b = this.#a;
      foo() { return this.#a; }
      bar(v) { this.#b = v; }
      constructor() {
        super();
        this.foo();
        this.bar(3);
      }
    }
  
    class C extends B {
      #a = 2;
      constructor() {
        (() => super())();
      }
    }
  
    new A;
    new B;
    new C;
  };
"
frame size: 15
parameter count: 1
bytecode array length: 277
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(Star), R(14),
                B(CreateClosure), U8(3), U8(0), U8(2),
                B(Star), R(11),
                B(LdaConstant), U8(2),
                B(Star), R(12),
                B(Mov), R(11), R(13),
                B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3),
                B(Star), R(12),
                B(CreateClosure), U8(4), U8(1), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(1),
                B(Star), R(8),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(Mov), R(7), R(9),
                B(Mov), R(13), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(3),
                B(Star), R(8),
                B(Mov), R(9), R(5),
                B(CreateClosure), U8(6), U8(2), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(0),
                B(PopContext), R(6),
                B(Mov), R(5), R(0),
  /*   38 E> */ B(CreateBlockContext), U8(8),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(Star), R(14),
                B(CreateClosure), U8(11), U8(3), U8(2),
                B(Star), R(11),
                B(LdaConstant), U8(10),
                B(Star), R(12),
                B(Mov), R(11), R(13),
                B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3),
                B(Star), R(12),
                B(CreateClosure), U8(12), U8(4), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(9),
                B(Star), R(8),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(LdaConstant), U8(13),
                B(Star), R(11),
                B(LdaConstant), U8(13),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
                B(StaCurrentContextSlot), U8(5),
                B(CreateClosure), U8(14), U8(5), U8(2),
                B(Star), R(11),
                B(CreateClosure), U8(15), U8(6), U8(2),
                B(Star), R(12),
                B(Mov), R(7), R(9),
                B(Mov), R(13), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5),
                B(Star), R(8),
                B(Mov), R(9), R(4),
                B(CreateClosure), U8(16), U8(7), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(2),
                B(PopContext), R(6),
                B(Mov), R(4), R(1),
  /*  140 E> */ B(CreateBlockContext), U8(17),
                B(PushContext), R(6),
  /*  356 E> */ B(CreateClosure), U8(19), U8(8), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(18),
                B(Star), R(8),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(LdaConstant), U8(5),
                B(Star), R(11),
                B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
                B(StaCurrentContextSlot), U8(4),
                B(Mov), R(7), R(9),
                B(Mov), R(4), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(3),
                B(Star), R(8),
                B(Mov), R(9), R(3),
                B(CreateClosure), U8(20), U8(9), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(4),
                B(PopContext), R(6),
                B(Mov), R(3), R(2),
  /*  430 S> */ B(Ldar), R(5),
  /*  430 E> */ B(Construct), R(5), R(0), U8(0), U8(6),
  /*  439 S> */ B(Ldar), R(4),
  /*  439 E> */ B(Construct), R(4), R(0), U8(0), U8(8),
  /*  448 S> */ B(Ldar), R(3),
  /*  448 E> */ B(Construct), R(3), R(0), U8(0), U8(10),
                B(LdaUndefined),
  /*  458 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#a"],
  SHARED_FUNCTION_INFO_TYPE,
  SYMBOL_TYPE,
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#b"],
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

