From f70cc90eb9a706e25b7ecdbd3de83d07c76deee4 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:12:35 +0200 Subject: [PATCH] VScript: move script run code to dedicated method --- .../languages/squirrel_re/vsquirrel.cpp | 29 +++++++++++++++++++ src/vscript/languages/squirrel_re/vsquirrel.h | 1 + src/vscript/vscript.cpp | 18 ++---------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/vscript/languages/squirrel_re/vsquirrel.cpp b/src/vscript/languages/squirrel_re/vsquirrel.cpp index 90e4f23a..6c3f729c 100644 --- a/src/vscript/languages/squirrel_re/vsquirrel.cpp +++ b/src/vscript/languages/squirrel_re/vsquirrel.cpp @@ -101,6 +101,35 @@ SQRESULT CSquirrelVM::RegisterConstant(const SQChar* name, SQInteger value) return CSquirrelVM__RegisterConstant(this, name, value); } +//--------------------------------------------------------------------------------- +// Purpose: runs text as script on the VM +// Input : *script - +// Output : true on success, false otherwise +//--------------------------------------------------------------------------------- +bool CSquirrelVM::Run(const SQChar* const script) +{ + Assert(m_hVM); + + bool success = false; + SQBufState bufState(script); + + if (SQ_SUCCEEDED(sq_compilebuffer(m_hVM, &bufState, "unnamed", -1, SQTrue))) + { + SQObject hScript; + sq_getstackobj(m_hVM, -1, &hScript); + + sq_addref(m_hVM, &hScript); + sq_pop(m_hVM, 1); + + if (ExecuteFunction((HSCRIPT)&hScript, NULL, 0, NULL, NULL) == SCRIPT_DONE) + success = true; + + sq_release(m_hVM, &hScript); + } + + return success; +} + //--------------------------------------------------------------------------------- // Purpose: executes a code callback // Input : *name - diff --git a/src/vscript/languages/squirrel_re/vsquirrel.h b/src/vscript/languages/squirrel_re/vsquirrel.h index b9c312a9..d70c0828 100644 --- a/src/vscript/languages/squirrel_re/vsquirrel.h +++ b/src/vscript/languages/squirrel_re/vsquirrel.h @@ -31,6 +31,7 @@ public: FORCEINLINE SQCONTEXT GetContext() const { return m_iContext; } FORCEINLINE eDLL_T GetNativeContext() const { return (eDLL_T)GetContext(); } + bool Run(const SQChar* const script); ScriptStatus_t ExecuteFunction(HSCRIPT hFunction, void** pArgs, unsigned int nArgs, void* pReturn, HSCRIPT hScope); private: diff --git a/src/vscript/vscript.cpp b/src/vscript/vscript.cpp index 11c7fced..41064fc3 100644 --- a/src/vscript/vscript.cpp +++ b/src/vscript/vscript.cpp @@ -156,22 +156,10 @@ void Script_Execute(const SQChar* code, const SQCONTEXT context) return; } - SQBufState bufState(code); - - if (SQ_SUCCEEDED(sq_compilebuffer(v, &bufState, "unnamed", -1, SQTrue))) + if (!s->Run(code)) { - SQObject hScript; - sq_getstackobj(v, -1, &hScript); - - sq_addref(v, &hScript); - sq_pop(v, 1); - - if (s->ExecuteFunction((HSCRIPT)&hScript, NULL, 0, NULL, NULL) == SCRIPT_ERROR) - { - Error(eDLL_T::ENGINE, NO_ERROR, "Failed to execute %s script \"%s\"\n", contextName, code); - } - - sq_release(v, &hScript); + Error(eDLL_T::ENGINE, NO_ERROR, "Failed to run %s script \"%s\"\n", contextName, code); + return; } }