#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: no
test function name: test
private methods: yes

---
snippet: "
  class A {
    #a() { return 1; }
    constructor() { return this.#a(); }
  }
  
  var test = A;
  new A;
"
frame size: 3
parameter count: 1
bytecode array length: 28
bytecodes: [
  /*   44 E> */ B(StackCheck),
                B(LdaCurrentContextSlot), U8(5),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(2),
  /*   49 S> */ B(LdaCurrentContextSlot), U8(5),
  /*   61 E> */ B(LdaKeyedProperty), R(this), U8(0),
                B(LdaCurrentContextSlot), U8(4),
                B(Star), R(2),
  /*   63 E> */ B(CallAnyReceiver), R(2), R(this), U8(1), U8(2),
  /*   66 S> */ B(Return),
]
constant pool: [
]
handlers: [
]

---
snippet: "
  class B {
    #b() { return 1; }
    constructor() { this.#b = 1; }
  }
  
  var test = B;
  new test;
"
frame size: 4
parameter count: 1
bytecode array length: 29
bytecodes: [
  /*   44 E> */ B(StackCheck),
                B(LdaCurrentContextSlot), U8(5),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(2),
  /*   49 S> */ B(Wide), B(LdaSmi), I16(261),
                B(Star), R(2),
                B(LdaConstant), U8(0),
                B(Star), R(3),
  /*   57 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
                B(Throw),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#b"],
]
handlers: [
]

---
snippet: "
  class C {
    #c() { return 1; }
    constructor() { this.#c++; }
  }
  
  var test = C;
  new test;
"
frame size: 4
parameter count: 1
bytecode array length: 29
bytecodes: [
  /*   44 E> */ B(StackCheck),
                B(LdaCurrentContextSlot), U8(5),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(2),
  /*   49 S> */ B(Wide), B(LdaSmi), I16(261),
                B(Star), R(2),
                B(LdaConstant), U8(0),
                B(Star), R(3),
                B(CallRuntime), U16(Runtime::kNewTypeError), R(2), U8(2),
                B(Throw),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#c"],
]
handlers: [
]

