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

70 lines
5.9 KiB
C++

#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSScript_Internal_IFunction.h"
#include "RE/B/BSScript_Internal_VDescTable.h"
#include "RE/B/BSScript_PackedInstructionStream.h"
#include "RE/B/BSScript_TypeInfo.h"
#include "RE/B/BSTSmartPointer.h"
namespace RE
{
namespace BSScript
{
namespace Internal
{
class __declspec(novtable) ScriptFunction :
public IFunction // 00
{
public:
static constexpr auto RTTI{ RTTI::BSScript__Internal__ScriptFunction };
static constexpr auto VTABLE{ VTABLE::BSScript__Internal__ScriptFunction };
virtual ~ScriptFunction(); // 00
// override (IFunction)
virtual const BSFixedString& GetName() const override; // 01 - { return functionName; }
virtual const BSFixedString& GetObjectTypeName() const override; // 02 - { return scriptName; }
virtual const BSFixedString& GetStateName() const override; // 03 - { return stateName; }
virtual TypeInfo GetReturnType() const override; // 04 - { a_dst = returnType; return a_dst; }
virtual std::uint32_t GetParamCount() const override; // 05 - { return varInfo.numParams; }
virtual void GetParam(std::uint32_t a_param, BSFixedString& a_paramName, TypeInfo& a_paramType) const override; // 06
virtual std::uint32_t GetStackFrameSize() const override; // 07 - { return (varInfo.numVars - varInfo.numParams) + GetNumParams(); }
virtual bool GetIsNative() const override; // 08 - { return false; }
virtual bool GetIsStatic() const override; // 09 - { return isStatic; }
virtual bool GetIsEmpty() const override; // 0A - { return unk48 == 0; }
virtual FunctionType GetFunctionType() const override; // 0B - { return unk58; }
virtual std::uint32_t GetUserFlags() const override; // 0C - { return unk40; }
virtual const BSFixedString& GetDocString() const override; // 0D - { return unk60; }
virtual void InsertLocals(StackFrame& a_frame) const override; // 0E
virtual CallResult Call(const BSTSmartPointer<Stack>& a_stack, ErrorLogger& a_errorLogger, Internal::VirtualMachine& a_vm, bool a_inScriptTasklet) const override; // 0F
virtual const BSFixedString& GetSourceFilename() const override; // 10 - { return sourceFileName; }
virtual bool TranslateIPToLineNumber(std::uint32_t a_ip, std::uint32_t& a_lineNumber) const override; // 11
virtual bool GetVarNameForStackIndex(std::uint32_t a_idx, BSFixedString& a_out) const override; // 12
virtual bool CanBeCalledFromTasklets() const override; // 13 - { return true; }
virtual void SetCallableFromTasklets(bool a_taskletCallable) override; // 14 - { return; }
// members
BSFixedString name; // 10
BSFixedString objName; // 18
BSFixedString stateName; // 20
TypeInfo retType; // 28
VDescTable descTable; // 30
std::uint32_t userFlags; // 40
std::uint32_t pad44; // 44
ByteCode::PackedInstructionStream instructions; // 48
REX::TEnumSet<FunctionType, std::uint16_t> functionType; // 58
bool isStatic; // 5A
std::uint8_t pad5B; // 5B
std::uint32_t pad5C; // 5C
BSFixedString docString; // 60
BSFixedString sourceFileName; // 68
std::uint32_t lineNumberCount; // 70
std::uint32_t pad74; // 74
std::uint16_t* lineNumbers; // 78
};
static_assert(sizeof(ScriptFunction) == 0x80);
}
}
}