mirror of
https://github.com/R2Northstar/NorthstarLauncher
synced 2026-08-23 20:26:04 -04:00
Default compile constants to 0 if not defined (#932)
Some checks failed
CI / format-check (push) Failing after 3s
CI / nix-build (push) Failing after 3s
CI / format-check-cmake-files (push) Failing after 2s
Merge Conflict Auto Label / triage (push) Failing after 1s
CI / build (map[cc:cl name:MSVC]) (push) Has been cancelled
CI / build (map[cc:clang-cl name:LLVM]) (push) Has been cancelled
Some checks failed
CI / format-check (push) Failing after 3s
CI / nix-build (push) Failing after 3s
CI / format-check-cmake-files (push) Failing after 2s
Merge Conflict Auto Label / triage (push) Failing after 1s
CI / build (map[cc:cl name:MSVC]) (push) Has been cancelled
CI / build (map[cc:clang-cl name:LLVM]) (push) Has been cancelled
* default ifdef constants to 0 --------- Co-authored-by: Will <39478251+sonny-tel@users.noreply.github.com> Co-authored-by: Will <39478251+VITALISED@users.noreply.github.com>
This commit is contained in:
parent
2c16ed3605
commit
9ddf557948
3 changed files with 55 additions and 3 deletions
|
|
@ -20,7 +20,7 @@
|
||||||
AUTOHOOK_INIT()
|
AUTOHOOK_INIT()
|
||||||
|
|
||||||
SquirrelManagerManager g_pSquirrel;
|
SquirrelManagerManager g_pSquirrel;
|
||||||
|
thread_local SQCompiler* pIfDirectiveCompiler;
|
||||||
std::shared_ptr<ColoredLogger> getSquirrelLoggerByContext(ScriptContext context)
|
std::shared_ptr<ColoredLogger> getSquirrelLoggerByContext(ScriptContext context)
|
||||||
{
|
{
|
||||||
switch (context)
|
switch (context)
|
||||||
|
|
@ -326,9 +326,43 @@ bool IsUIVM(ScriptContext context, HSQUIRRELVM pSqvm)
|
||||||
return ScriptContext(pSqvm->sharedState->cSquirrelVM->vmContext) == ScriptContext::UI;
|
return ScriptContext(pSqvm->sharedState->cSquirrelVM->vmContext) == ScriptContext::UI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <ScriptContext context> std::int64_t (*SQCompiler_ParseDirective)(SQCompiler* pCompiler);
|
||||||
|
template <ScriptContext context> std::int64_t __fastcall SQCompiler_ParseDirectiveHook(SQCompiler* pCompiler)
|
||||||
|
{
|
||||||
|
SQCompiler* pPreviousCompiler = pIfDirectiveCompiler;
|
||||||
|
pIfDirectiveCompiler = pCompiler;
|
||||||
|
const std::int64_t result = SQCompiler_ParseDirective<context>(pCompiler);
|
||||||
|
pIfDirectiveCompiler = pPreviousCompiler;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <ScriptContext context>
|
||||||
|
bool (*SQCompiler_ResolveLocalOrConstant)(void* pFunctionState, SQObject* pIdentifier, SQObject* pValue, std::uintptr_t* pType);
|
||||||
|
template <ScriptContext context>
|
||||||
|
bool __fastcall SQCompiler_ResolveLocalOrConstantHook(void* pFunctionState, SQObject* pIdentifier, SQObject* pValue, std::uintptr_t* pType)
|
||||||
|
{
|
||||||
|
if (SQCompiler_ResolveLocalOrConstant<context>(pFunctionState, pIdentifier, pValue, pType))
|
||||||
|
return true;
|
||||||
|
// if we're not in a preprocessor directive, we don't want to resolve the identifier as a constant
|
||||||
|
if (!pIfDirectiveCompiler || pIfDirectiveCompiler->preprocessorDepth <= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// evaluate to 0 if we're doing directives because #if with a compile error is stupid
|
||||||
|
pValue->_Type = OT_INTEGER;
|
||||||
|
pValue->structNumber = 0;
|
||||||
|
pValue->_VAL.as64Integer = 0;
|
||||||
|
constexpr std::uint32_t typeHashMagic = 0x9E3779B9u - 0x61C88647u;
|
||||||
|
constexpr std::uint32_t typeHash = typeHashMagic * static_cast<std::uint32_t>(OT_INTEGER);
|
||||||
|
constexpr std::size_t typeIndex = (typeHash / 0xF499u) & 0x3FFFu;
|
||||||
|
SQSharedState* pSharedState = pIfDirectiveCompiler->pSQVM->sharedState;
|
||||||
|
*pType = reinterpret_cast<std::uintptr_t>(&pSharedState->compilerTypeDescriptors[typeIndex]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
template <ScriptContext context> void* (*sq_compiler_create)(HSQUIRRELVM sqvm, void* a2, void* a3, SQBool bShouldThrowError);
|
template <ScriptContext context> void* (*sq_compiler_create)(HSQUIRRELVM sqvm, void* a2, void* a3, SQBool bShouldThrowError);
|
||||||
template <ScriptContext context> void* __fastcall sq_compiler_createHook(HSQUIRRELVM sqvm, void* a2, void* a3, SQBool bShouldThrowError)
|
template <ScriptContext context> void* __fastcall sq_compiler_createHook(HSQUIRRELVM sqvm, void* a2, void* a3, SQBool bShouldThrowError)
|
||||||
{
|
{
|
||||||
|
pIfDirectiveCompiler = nullptr;
|
||||||
// store whether errors generated from this compile should be fatal
|
// store whether errors generated from this compile should be fatal
|
||||||
if (IsUIVM(context, sqvm))
|
if (IsUIVM(context, sqvm))
|
||||||
g_pSquirrel[ScriptContext::UI]->m_bFatalCompilationErrors = bShouldThrowError;
|
g_pSquirrel[ScriptContext::UI]->m_bFatalCompilationErrors = bShouldThrowError;
|
||||||
|
|
@ -789,6 +823,13 @@ ON_DLL_LOAD_RELIESON("client.dll", ClientSquirrel, ConCommand, (CModule module))
|
||||||
|
|
||||||
MAKEHOOK(module.Offset(0x8AD0), &sq_compiler_createHook<ScriptContext::CLIENT>, &sq_compiler_create<ScriptContext::CLIENT>);
|
MAKEHOOK(module.Offset(0x8AD0), &sq_compiler_createHook<ScriptContext::CLIENT>, &sq_compiler_create<ScriptContext::CLIENT>);
|
||||||
|
|
||||||
|
MAKEHOOK(
|
||||||
|
module.Offset(0x58590), &SQCompiler_ParseDirectiveHook<ScriptContext::CLIENT>, &SQCompiler_ParseDirective<ScriptContext::CLIENT>);
|
||||||
|
MAKEHOOK(
|
||||||
|
module.Offset(0x65CB0),
|
||||||
|
&SQCompiler_ResolveLocalOrConstantHook<ScriptContext::CLIENT>,
|
||||||
|
&SQCompiler_ResolveLocalOrConstant<ScriptContext::CLIENT>);
|
||||||
|
|
||||||
MAKEHOOK(module.Offset(0x12B00), &SQPrintHook<ScriptContext::CLIENT>, &SQPrint<ScriptContext::CLIENT>);
|
MAKEHOOK(module.Offset(0x12B00), &SQPrintHook<ScriptContext::CLIENT>, &SQPrint<ScriptContext::CLIENT>);
|
||||||
MAKEHOOK(module.Offset(0x12BA0), &SQPrintHook<ScriptContext::UI>, &SQPrint<ScriptContext::UI>);
|
MAKEHOOK(module.Offset(0x12BA0), &SQPrintHook<ScriptContext::UI>, &SQPrint<ScriptContext::UI>);
|
||||||
|
|
||||||
|
|
@ -868,6 +909,13 @@ ON_DLL_LOAD_RELIESON("server.dll", ServerSquirrel, ConCommand, (CModule module))
|
||||||
|
|
||||||
MAKEHOOK(module.Offset(0x8AA0), &sq_compiler_createHook<ScriptContext::SERVER>, &sq_compiler_create<ScriptContext::SERVER>);
|
MAKEHOOK(module.Offset(0x8AA0), &sq_compiler_createHook<ScriptContext::SERVER>, &sq_compiler_create<ScriptContext::SERVER>);
|
||||||
|
|
||||||
|
MAKEHOOK(
|
||||||
|
module.Offset(0x58530), &SQCompiler_ParseDirectiveHook<ScriptContext::SERVER>, &SQCompiler_ParseDirective<ScriptContext::SERVER>);
|
||||||
|
MAKEHOOK(
|
||||||
|
module.Offset(0x65C50),
|
||||||
|
&SQCompiler_ResolveLocalOrConstantHook<ScriptContext::SERVER>,
|
||||||
|
&SQCompiler_ResolveLocalOrConstant<ScriptContext::SERVER>);
|
||||||
|
|
||||||
MAKEHOOK(module.Offset(0x1FE90), &SQPrintHook<ScriptContext::SERVER>, &SQPrint<ScriptContext::SERVER>);
|
MAKEHOOK(module.Offset(0x1FE90), &SQPrintHook<ScriptContext::SERVER>, &SQPrint<ScriptContext::SERVER>);
|
||||||
MAKEHOOK(module.Offset(0x260E0), &CreateNewVMHook<ScriptContext::SERVER>, &CreateNewVM<ScriptContext::SERVER>);
|
MAKEHOOK(module.Offset(0x260E0), &CreateNewVMHook<ScriptContext::SERVER>, &CreateNewVM<ScriptContext::SERVER>);
|
||||||
MAKEHOOK(module.Offset(0x26E20), &DestroyVMHook<ScriptContext::SERVER>, &DestroyVM<ScriptContext::SERVER>);
|
MAKEHOOK(module.Offset(0x26E20), &DestroyVMHook<ScriptContext::SERVER>, &DestroyVM<ScriptContext::SERVER>);
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,9 @@ struct SQCompiler
|
||||||
int64_t qword98;
|
int64_t qword98;
|
||||||
BYTE gapA0[280];
|
BYTE gapA0[280];
|
||||||
bool bFatalError;
|
bool bFatalError;
|
||||||
BYTE gap1B9[143];
|
BYTE gap1B9[11];
|
||||||
|
int preprocessorDepth;
|
||||||
|
BYTE gap1C8[128];
|
||||||
int64_t qword248;
|
int64_t qword248;
|
||||||
int64_t qword250;
|
int64_t qword250;
|
||||||
int64_t qword258;
|
int64_t qword258;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,9 @@ struct SQSharedState
|
||||||
SQTable* _entityTypesMaybe;
|
SQTable* _entityTypesMaybe;
|
||||||
SQObjectType unknownTable2Type;
|
SQObjectType unknownTable2Type;
|
||||||
SQTable* unknownTable2;
|
SQTable* unknownTable2;
|
||||||
unsigned char gap_41D8[64];
|
unsigned char gap_41D8[16];
|
||||||
|
SQObject* compilerTypeDescriptors;
|
||||||
|
unsigned char gap_41F0[40];
|
||||||
SQCompiler* pCompiler;
|
SQCompiler* pCompiler;
|
||||||
SQObjectType _compilerKeywordsType;
|
SQObjectType _compilerKeywordsType;
|
||||||
SQTable* _compilerKeywords;
|
SQTable* _compilerKeywords;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue