#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes
public fields: 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: 129
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Ldar), R(closure),
                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),
                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(1),
                B(CreateClosure), U8(4), U8(1), U8(2),
                B(Star), R(7),
                B(StaNamedProperty), R(5), U8(5), U8(2),
                B(PopContext), R(4),
                B(Mov), R(1), R(2),
                B(Ldar), R(closure),
  /*   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(4), U8(2),
                B(Star), R(5),
                B(LdaConstant), U8(7),
                B(Star), R(6),
                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(0),
                B(CreateClosure), U8(9), U8(5), U8(2),
                B(Star), R(7),
                B(StaNamedProperty), R(5), U8(5), U8(6),
                B(PopContext), R(4),
                B(Mov), R(0), R(3),
  /*  120 S> */ B(Ldar), R(1),
  /*  120 E> */ B(Construct), R(1), R(0), U8(0), U8(8),
  /*  129 S> */ B(Ldar), R(0),
  /*  129 E> */ B(Construct), R(0), R(0), U8(0), U8(10),
                B(LdaUndefined),
  /*  138 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  ONE_BYTE_INTERNALIZED_STRING_TYPE ["b"],
  SHARED_FUNCTION_INFO_TYPE,
  SYMBOL_TYPE,
  FIXED_ARRAY_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: 244
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(Ldar), R(closure),
                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),
                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(2),
                B(CreateClosure), U8(6), U8(2), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(3),
                B(PopContext), R(6),
                B(Mov), R(2), R(3),
                B(Ldar), R(closure),
  /*   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(5), 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(6), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(9),
                B(Star), R(8),
                B(LdaConstant), U8(5),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(11),
                B(CreateClosure), U8(13), U8(7), 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(1),
                B(CreateClosure), U8(14), U8(8), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(9),
                B(PopContext), R(6),
                B(Mov), R(1), R(4),
                B(Ldar), R(closure),
  /*   90 E> */ B(CreateBlockContext), U8(15),
                B(PushContext), R(6),
                B(LdaTheHole),
                B(StaCurrentContextSlot), U8(4),
  /*  236 E> */ B(CreateClosure), U8(17), U8(11), U8(2),
                B(Star), R(7),
                B(LdaConstant), U8(16),
                B(Star), R(8),
                B(LdaConstant), U8(5),
                B(StaCurrentContextSlot), U8(4),
                B(Star), R(11),
                B(Mov), R(7), R(9),
                B(Mov), R(1), R(10),
                B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(4),
                B(Star), R(8),
                B(Mov), R(9), R(0),
                B(CreateClosure), U8(18), U8(12), U8(2),
                B(Star), R(9),
                B(StaNamedProperty), R(7), U8(7), U8(13),
                B(PopContext), R(6),
                B(Mov), R(0), R(5),
  /*  329 S> */ B(Ldar), R(2),
  /*  329 E> */ B(Construct), R(2), R(0), U8(0), U8(15),
  /*  338 S> */ B(Ldar), R(1),
  /*  338 E> */ B(Construct), R(1), R(0), U8(0), U8(17),
  /*  347 S> */ B(Ldar), R(0),
  /*  347 E> */ B(Construct), R(0), R(0), U8(0), U8(19),
                B(LdaUndefined),
  /*  356 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_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,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

