Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/B/BSScript_Internal_CodeTasklet.h
T
2026-05-30 18:33:24 +12:00

118 lines
3.0 KiB
C++

#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSScript_Internal_IFuncCallQuery.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTSmartPointer.h"
namespace RE
{
namespace BSScript
{
class ErrorLogger;
class Stack;
class StackFrame;
namespace Internal
{
class VirtualMachine;
class __declspec(novtable) CodeTasklet :
public IFuncCallQuery // 00
{
public:
static constexpr auto RTTI{ RTTI::BSScript__Internal__CodeTasklet };
static constexpr auto VTABLE{ VTABLE::BSScript__Internal__CodeTasklet };
enum class OpCode : std::uint32_t
{
kNOP,
kIADD,
kFADD,
kISUB,
kFSUB,
kIMUL,
kFMUL,
kIDIV,
kFDIV,
kIMOD,
kNOT,
kINEG,
kFNEG,
kASSIGN,
kCAST,
kCMP_EQ,
kCMP_LT,
kCMP_LTE,
kCMP_GT,
kCMP_GTE,
kJMP,
kJMPT,
kJMPF,
kCALLMETHOD,
kCALLPARENT,
kCALLSTATIC,
kRETURN,
kSTRCAT,
kPROPGET,
kPROPSET,
kARRAY_CREATE,
kARRAY_LENGTH,
kARRAY_GETELEMENT,
kARRAY_SETELEMENT,
kARRAY_FINDELEMENT,
kARRAY_RFINDELEMENT,
kIS,
kSTRUCT_CREATE,
kSTRUCT_GET,
kSTRUCT_SET,
kARRAY_FINDSTRUCT,
kARRAY_RFINDSTRUCT,
kARRAY_ADD,
kARRAY_INSERT,
kARRAY_REMOVELAST,
kARRAY_REMOVE,
kARRAY_CLEAR
};
enum class ResumeReason
{
kNotResuming = 0,
kNotResumingNoIncrement = 1,
kInitialStart = 2,
kFunctionReturn = 3,
kRetryInstruction = 4,
kFunctionCall = 5
};
virtual ~CodeTasklet(); // 00
// override (IFuncCallQuery)
virtual bool GetFunctionCallInfo(
CallType& a_callType,
BSTSmartPointer<ObjectTypeInfo>& a_objectTypeInfo,
BSFixedString& a_name,
Variable& a_self,
BSScrapArray<Variable>& a_args) const override; // 01
// members
Stack* stack; // 10
VirtualMachine* vm; // 18
ErrorLogger* errorLogger; // 20
REX::TEnumSet<ResumeReason, std::uint32_t> resumeReason; // 28
std::uint32_t pad2C; // 2C
StackFrame* topFrame; // 30
std::uint32_t frameMemoryPage; // 38
std::int8_t jumpBitCount; // 3C
std::int8_t localVarBitCount; // 3D
std::int8_t memberVarBitCount; // 3E
std::uint8_t pad3F; // 3F
std::uint32_t instructionDataBitCount; // 40
std::uint32_t pad44; // 44
const void* instructionDataStart; // 48
};
static_assert(sizeof(CodeTasklet) == 0x50);
}
}
}