#
# 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: 4
parameter count: 1
bytecode array length: 30
bytecodes: [
                B(LdaImmutableCurrentContextSlot), U8(3),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(Mov), R(context), R(2),
  /*   44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
  /*   49 S> */ B(LdaImmutableCurrentContextSlot), U8(3),
  /*   61 E> */ B(LdaKeyedProperty), R(this), U8(0),
                B(LdaImmutableCurrentContextSlot), U8(2),
                B(Star), R(3),
  /*   63 E> */ B(CallAnyReceiver), R(3), 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: 5
parameter count: 1
bytecode array length: 31
bytecodes: [
                B(LdaImmutableCurrentContextSlot), U8(3),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(Mov), R(context), R(2),
  /*   44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
  /*   49 S> */ B(Wide), B(LdaSmi), I16(270),
                B(Star), R(3),
                B(LdaConstant), U8(0),
                B(Star), R(4),
  /*   57 E> */ B(CallRuntime), U16(Runtime::kNewTypeError), R(3), 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: 5
parameter count: 1
bytecode array length: 31
bytecodes: [
                B(LdaImmutableCurrentContextSlot), U8(3),
                B(Star), R(1),
                B(Mov), R(this), R(0),
                B(Mov), R(context), R(2),
  /*   44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
  /*   49 S> */ B(Wide), B(LdaSmi), I16(270),
                B(Star), R(3),
                B(LdaConstant), U8(0),
                B(Star), R(4),
                B(CallRuntime), U16(Runtime::kNewTypeError), R(3), U8(2),
                B(Throw),
]
constant pool: [
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["#c"],
]
handlers: [
]

---
snippet: "
  class D {
    #d() { return 1; }
    constructor() { (() => this)().#d(); }
  }
  
  var test = D;
  new test;
"
frame size: 6
parameter count: 1
bytecode array length: 57
bytecodes: [
  /*   44 E> */ B(CreateFunctionContext), U8(0), U8(1),
                B(PushContext), R(0),
                B(Ldar), R(this),
                B(StaCurrentContextSlot), U8(2),
                B(LdaImmutableContextSlot), R(0), U8(3), U8(0),
                B(Star), R(2),
                B(Mov), R(this), R(1),
                B(Mov), R(0), R(3),
                B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(1), U8(3),
  /*   49 S> */ B(CreateClosure), U8(1), U8(0), U8(2),
                B(Star), R(5),
  /*   61 E> */ B(CallUndefinedReceiver0), R(5), U8(0),
                B(Star), R(5),
                B(LdaImmutableContextSlot), R(0), U8(3), U8(0),
  /*   63 E> */ B(LdaKeyedProperty), R(5), U8(2),
                B(LdaImmutableContextSlot), R(0), U8(2), U8(0),
                B(Star), R(4),
  /*   66 E> */ B(CallAnyReceiver), R(4), R(5), U8(1), U8(4),
                B(LdaUndefined),
  /*   70 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

