#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes

---
snippet: "
  {
    class A {
      a;
      ['b'];
    }
  
    class B {
      a = 1;
      ['b'] = this.a;
    }
    new A;
    new B;
  }
"
frame size: 10
parameter count: 1
bytecode array length: 125
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(4),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(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),
  /*   60 S> */ B(LdaConstant), U8(3),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(9),
                B(Mov), R(5), R(7),
                B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(4),
                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(StaCurrentContextSlot), U8(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),
  /*   99 S> */ B(LdaConstant), U8(3),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(9),
                B(Mov), R(5), R(7),
                B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(4),
                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),
  /*  120 S> */ B(Ldar), R(3),
  /*  120 E> */ B(Construct), R(3), R(0), U8(0), U8(4),
  /*  129 S> */ B(Ldar), R(2),
  /*  129 E> */ B(Construct), R(2), R(0), U8(0), U8(6),
                B(LdaUndefined),
  /*  138 S> */ B(Return),
]
constant pool: [
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["b"],
  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;
      ['b'];
    }
  
    class B extends class {} {
      a = 1;
      ['b'] = this.a;
      foo() { return 1; }
      constructor() {
        super();
      }
    }
  
    class C extends B {
      a = 1;
      ['b'] = this.a;
      constructor() {
        (() => super())();
      }
    }
  
    new A;
    new B;
    new C;
  }
"
frame size: 15
parameter count: 1
bytecode array length: 238
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(CreateBlockContext), U8(0),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
                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),
  /*   77 S> */ B(LdaConstant), U8(5),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(11),
                B(Mov), R(7), R(9),
                B(Mov), R(13), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(4),
                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(StaCurrentContextSlot), U8(4),
                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),
  /*  133 S> */ B(LdaConstant), U8(5),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(11),
                B(CreateClosure), U8(13), U8(5), 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(14), U8(6), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(2),
                B(PopContext), R(6),
                B(Mov), R(4), R(1),
  /*   90 E> */ B(CreateBlockContext), U8(15),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
  /*  236 E> */ B(CreateClosure), U8(17), U8(7), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(16),
                B(Star), R(8),
  /*  256 S> */ B(LdaConstant), U8(5),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(11),
                B(Mov), R(7), R(9),
                B(Mov), R(4), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(4),
                B(Star), R(8),
                B(Mov), R(9), R(3),
                B(CreateClosure), U8(18), U8(8), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(4),
                B(PopContext), R(6),
                B(Mov), R(3), R(2),
  /*  329 S> */ B(Ldar), R(5),
  /*  329 E> */ B(Construct), R(5), R(0), U8(0), U8(6),
  /*  338 S> */ B(Ldar), R(4),
  /*  338 E> */ B(Construct), R(4), R(0), U8(0), U8(8),
  /*  347 S> */ B(Ldar), R(3),
  /*  347 E> */ B(Construct), R(3), R(0), U8(0), U8(10),
                B(LdaUndefined),
  /*  356 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 ["b"],
  SHARED_FUNCTION_INFO_TYPE,
  SYMBOL_TYPE,
  SCOPE_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  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: [
]

