#pragma once

#define ENUMERATE_BYTECODE_OPS(O) \
    O(Add) \
    O(AddPrivateName) \
    O(ArrayAppend) \
    O(Await) \
    O(BitwiseAnd) \
    O(BitwiseNot) \
    O(BitwiseOr) \
    O(ToInt32) \
    O(ToString) \
    O(ToPrimitiveWithStringHint) \
    O(BitwiseXor) \
    O(Call) \
    O(CallBuiltinMathAbs) \
    O(CallBuiltinMathLog) \
    O(CallBuiltinMathPow) \
    O(CallBuiltinMathExp) \
    O(CallBuiltinMathCeil) \
    O(CallBuiltinMathFloor) \
    O(CallBuiltinMathImul) \
    O(CallBuiltinMathRandom) \
    O(CallBuiltinMathRound) \
    O(CallBuiltinMathSqrt) \
    O(CallBuiltinMathSin) \
    O(CallBuiltinMathCos) \
    O(CallBuiltinMathTan) \
    O(CallBuiltinRegExpPrototypeExec) \
    O(CallBuiltinRegExpPrototypeReplace) \
    O(CallBuiltinRegExpPrototypeSplit) \
    O(CallBuiltinOrdinaryHasInstance) \
    O(CallBuiltinArrayIteratorPrototypeNext) \
    O(CallBuiltinMapIteratorPrototypeNext) \
    O(CallBuiltinSetIteratorPrototypeNext) \
    O(CallBuiltinStringIteratorPrototypeNext) \
    O(CallBuiltinStringFromCharCode) \
    O(CallBuiltinStringPrototypeCharCodeAt) \
    O(CallBuiltinStringPrototypeCharAt) \
    O(CallConstruct) \
    O(CallConstructWithArgumentArray) \
    O(CallDirectEval) \
    O(CallDirectEvalWithArgumentArray) \
    O(CallWithArgumentArray) \
    O(Catch) \
    O(ConcatString) \
    O(CopyObjectExcludingProperties) \
    O(CreateArguments) \
    O(CreateAsyncFromSyncIterator) \
    O(CreateDataPropertyOrThrow) \
    O(CreateLexicalEnvironment) \
    O(CreateImmutableBinding) \
    O(CreateMutableBinding) \
    O(CreatePrivateEnvironment) \
    O(CreateRestParams) \
    O(CreateVariable) \
    O(CreateVariableEnvironment) \
    O(Decrement) \
    O(DeleteById) \
    O(DeleteByValue) \
    O(DeleteVariable) \
    O(Div) \
    O(End) \
    O(EnterObjectEnvironment) \
    O(Exp) \
    O(GetById) \
    O(GetByIdWithThis) \
    O(GetByValue) \
    O(GetByValueWithThis) \
    O(GetCalleeAndThisFromEnvironment) \
    O(GetCompletionFields) \
    O(GetGlobal) \
    O(GetImportMeta) \
    O(GetLexicalEnvironment) \
    O(GetIterator) \
    O(GetLength) \
    O(GetLengthWithThis) \
    O(GetMethod) \
    O(GetNewTarget) \
    O(GetObjectPropertyIterator) \
    O(GetPrivateById) \
    O(GetTemplateObject) \
    O(GetBinding) \
    O(GetInitializedBinding) \
    O(GreaterThan) \
    O(GreaterThanEquals) \
    O(HasPrivateId) \
    O(ImportCall) \
    O(In) \
    O(Increment) \
    O(InitializeLexicalBinding) \
    O(InitializeVariableBinding) \
    O(InstanceOf) \
    O(IsCallable) \
    O(IsConstructor) \
    O(IteratorClose) \
    O(IteratorNext) \
    O(IteratorNextUnpack) \
    O(ObjectPropertyIteratorNext) \
    O(IteratorToArray) \
    O(Jump) \
    O(JumpFalse) \
    O(JumpGreaterThan) \
    O(JumpGreaterThanEquals) \
    O(JumpIf) \
    O(JumpLessThan) \
    O(JumpLessThanEquals) \
    O(JumpLooselyEquals) \
    O(JumpLooselyInequals) \
    O(JumpNullish) \
    O(JumpStrictlyEquals) \
    O(JumpStrictlyInequals) \
    O(JumpTrue) \
    O(JumpUndefined) \
    O(LeavePrivateEnvironment) \
    O(LeftShift) \
    O(LessThan) \
    O(LessThanEquals) \
    O(LooselyEquals) \
    O(LooselyInequals) \
    O(Mod) \
    O(Mov) \
    O(Mov2) \
    O(Mov3) \
    O(Mul) \
    O(NewArray) \
    O(NewArrayWithLength) \
    O(NewClass) \
    O(NewFunction) \
    O(NewObject) \
    O(NewObjectWithNoPrototype) \
    O(NewPrimitiveArray) \
    O(NewRegExp) \
    O(NewTypeError) \
    O(NewReferenceError) \
    O(Not) \
    O(PostfixDecrement) \
    O(PostfixIncrement) \
    O(PutById) \
    O(PutByIdWithThis) \
    O(PutBySpread) \
    O(PutByValue) \
    O(PutByValueWithThis) \
    O(PutPrivateById) \
    O(ResolveSuperBase) \
    O(ResolveThisBinding) \
    O(Return) \
    O(RightShift) \
    O(SetCompletionType) \
    O(SetGlobal) \
    O(SetLexicalEnvironment) \
    O(SetLexicalBinding) \
    O(SetVariableBinding) \
    O(StrictlyEquals) \
    O(StrictlyInequals) \
    O(Sub) \
    O(SuperCallWithArgumentArray) \
    O(Throw) \
    O(ThrowIfNotObject) \
    O(ThrowIfNullish) \
    O(ThrowIfTDZ) \
    O(ThrowConstAssignment) \
    O(ToBoolean) \
    O(ToLength) \
    O(ToObject) \
    O(Typeof) \
    O(TypeofBinding) \
    O(UnaryMinus) \
    O(UnaryPlus) \
    O(UnsignedRightShift) \
    O(Yield) \
    O(CacheObjectShape) \
    O(InitObjectLiteralProperty)
