#
# Autogenerated by generate-bytecode-expectations.
#

---
wrap: yes
class 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: [
]

