74 lines
4.4 KiB
C++
74 lines
4.4 KiB
C++
#pragma once
|
|
|
|
#include "RE/B/BSFixedString.h"
|
|
#include "RE/B/BSIntrusiveRefCounted.h"
|
|
#include "RE/B/BSTSmartPointer.h"
|
|
#include "RE/M/MemoryManager.h"
|
|
|
|
namespace RE
|
|
{
|
|
namespace BSScript
|
|
{
|
|
class ErrorLogger;
|
|
class Stack;
|
|
class StackFrame;
|
|
class TypeInfo;
|
|
|
|
namespace Internal
|
|
{
|
|
class VirtualMachine;
|
|
}
|
|
|
|
class __declspec(novtable) IFunction :
|
|
public BSIntrusiveRefCounted // 08
|
|
{
|
|
public:
|
|
static constexpr auto RTTI{ RTTI::BSScript__IFunction };
|
|
static constexpr auto VTABLE{ VTABLE::BSScript__IFunction };
|
|
|
|
enum class CallResult
|
|
{
|
|
kCompleted = 0x0,
|
|
kSetupForVM = 0x1,
|
|
kInProgress = 0x2,
|
|
kFailedRetry = 0x3,
|
|
kFailedAbort = 0x4
|
|
};
|
|
|
|
enum class FunctionType
|
|
{
|
|
kNormal = 0x0,
|
|
kPropertyGetter = 0x1,
|
|
kPropertySetter = 0x2
|
|
};
|
|
|
|
virtual ~IFunction() = default; // 00
|
|
|
|
// add
|
|
virtual const BSFixedString& GetName() const = 0; // 01
|
|
virtual const BSFixedString& GetObjectTypeName() const = 0; // 02
|
|
virtual const BSFixedString& GetStateName() const = 0; // 03
|
|
virtual TypeInfo GetReturnType() const = 0; // 04
|
|
virtual std::uint32_t GetParamCount() const = 0; // 05
|
|
virtual void GetParam(std::uint32_t a_param, BSFixedString& a_paramName, TypeInfo& a_paramType) const = 0; // 06
|
|
virtual std::uint32_t GetStackFrameSize() const = 0; // 07
|
|
virtual bool GetIsNative() const = 0; // 08
|
|
virtual bool GetIsStatic() const = 0; // 09
|
|
virtual bool GetIsEmpty() const = 0; // 0A
|
|
virtual FunctionType GetFunctionType() const = 0; // 0B
|
|
virtual std::uint32_t GetUserFlags() const = 0; // 0C
|
|
virtual const BSFixedString& GetDocString() const = 0; // 0D
|
|
virtual void InsertLocals(StackFrame& a_frame) const = 0; // 0E
|
|
virtual CallResult Call(const BSTSmartPointer<Stack>& a_stack, ErrorLogger& a_errorLogger, Internal::VirtualMachine& a_vm, bool a_inScriptTasklet) const = 0; // 0F
|
|
virtual const BSFixedString& GetSourceFilename() const = 0; // 10
|
|
virtual bool TranslateIPToLineNumber(std::uint32_t a_ip, std::uint32_t& a_lineNumber) const = 0; // 11
|
|
virtual bool GetVarNameForStackIndex(std::uint32_t a_index, BSFixedString& a_variableName) const = 0; // 12
|
|
virtual bool CanBeCalledFromTasklets() const = 0; // 13
|
|
virtual void SetCallableFromTasklets(bool a_taskletCallable) = 0; // 14
|
|
|
|
F4_HEAP_REDEFINE_NEW(IFunction);
|
|
};
|
|
static_assert(sizeof(IFunction) == 0x10);
|
|
}
|
|
}
|