#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes
public fields: yes

---
snippet: "
  {
    class A extends class {} {
      a;
      static c;
    }
  
    class B extends class {} {
      a = 1;
      static c = 3;
      constructor() {
        super();
      }
    }
  
    class C extends class {} {
      a = 1;
      static c = 3;
      constructor() {
        (() => super())();
      }
    }
  
    new A;
    new B;
    new C;
  }
"
frame size: 14
parameter count: 1
bytecode array length: 240
bytecodes: [
  /*   30 E> */ B(StackCheck),
                B(LdaTheHole),
                B(Star), R(13),
                B(CreateClosure), U8(2), U8(0), U8(2),
                B(Star), R(10),
                B(LdaConstant), U8(1),
                B(Star), R(11),
                B(Mov), R(10), R(12),
                B(CallRuntime), U16(Runtime::kDefineClass), R(11), U8(3),
                B(Star), R(11),
                B(CreateClosure), U8(3), U8(1), U8(2),
                B(Star), R(6),
                B(LdaConstant), U8(0),
                B(Star), R(7),
                B(Mov), R(6), R(8),
                B(Mov), R(12), R(9),
                B(CallRuntime), U16(Runtime::kDefineClass), R(7), U8(3),
                B(Star), R(7),
                B(Mov), R(8), R(2),
                B(CreateClosure), U8(4), U8(2), U8(2),
                B(Star), R(8),
                B(StaNamedProperty), R(6), U8(5), U8(3),
                B(CreateClosure), U8(6), U8(5), U8(2),
                B(Star), R(10),
                B(CallProperty0), R(10), R(2), U8(6),
                B(Mov), R(2), R(3),
                B(LdaTheHole),
                B(Star), R(13),
  /*   38 E> */ B(CreateClosure), U8(9), U8(8), U8(2),
                B(Star), R(10),
                B(LdaConstant), U8(8),
                B(Star), R(11),
                B(Mov), R(10), R(12),
                B(CallRuntime), U16(Runtime::kDefineClass), R(11), U8(3),
                B(Star), R(11),
                B(CreateClosure), U8(10), U8(9), U8(2),
                B(Star), R(6),
                B(LdaConstant), U8(7),
                B(Star), R(7),
                B(Mov), R(6), R(8),
                B(Mov), R(12), R(9),
                B(CallRuntime), U16(Runtime::kDefineClass), R(7), U8(3),
                B(Star), R(7),
                B(Mov), R(8), R(1),
                B(CreateClosure), U8(11), U8(10), U8(2),
                B(Star), R(8),
                B(StaNamedProperty), R(6), U8(5), U8(11),
                B(CreateClosure), U8(12), U8(13), U8(2),
                B(Star), R(10),
                B(CallProperty0), R(10), R(1), U8(14),
                B(Mov), R(1), R(4),
                B(LdaTheHole),
                B(Star), R(13),
  /*   93 E> */ B(CreateClosure), U8(15), U8(16), U8(2),
                B(Star), R(10),
                B(LdaConstant), U8(14),
                B(Star), R(11),
                B(Mov), R(10), R(12),
                B(CallRuntime), U16(Runtime::kDefineClass), R(11), U8(3),
                B(Star), R(11),
                B(CreateClosure), U8(16), U8(17), U8(2),
                B(Star), R(6),
                B(LdaConstant), U8(13),
                B(Star), R(7),
                B(Mov), R(6), R(8),
                B(Mov), R(12), R(9),
                B(CallRuntime), U16(Runtime::kDefineClass), R(7), U8(3),
                B(Star), R(7),
                B(Mov), R(8), R(0),
                B(CreateClosure), U8(17), U8(18), U8(2),
                B(Star), R(8),
                B(StaNamedProperty), R(6), U8(5), U8(19),
                B(CreateClosure), U8(18), U8(21), U8(2),
                B(Star), R(10),
                B(CallProperty0), R(10), R(0), U8(22),
                B(Mov), R(0), R(5),
  /*  311 S> */ B(Ldar), R(2),
  /*  311 E> */ B(Construct), R(2), R(0), U8(0), U8(24),
  /*  320 S> */ B(Ldar), R(1),
  /*  320 E> */ B(Construct), R(1), R(0), U8(0), U8(26),
  /*  329 S> */ B(Ldar), R(0),
  /*  329 E> */ B(Construct), R(0), R(0), U8(0), U8(28),
                B(LdaUndefined),
  /*  338 S> */ B(Return),
]
constant pool: [
  FIXED_ARRAY_TYPE,
  FIXED_ARRAY_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
  SYMBOL_TYPE,
  SHARED_FUNCTION_INFO_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,
  SHARED_FUNCTION_INFO_TYPE,
  SHARED_FUNCTION_INFO_TYPE,
]
handlers: [
]

