[Chat] Isolate stack

This commit is contained in:
Diavolo
2022-06-30 17:07:39 +02:00
parent 7f8bf48c91
commit 1e67fadc42
4 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#include <STDInclude.hpp>
namespace Scripting
{
StackIsolation::StackIsolation()
{
this->inParamCount_ = Game::scrVmPub->inparamcount;
this->outParamCount_ = Game::scrVmPub->outparamcount;
this->top_ = Game::scrVmPub->top;
this->maxStack_ = Game::scrVmPub->maxStack;
Game::scrVmPub->top = this->stack_;
Game::scrVmPub->maxStack = &this->stack_[ARRAYSIZE(this->stack_) - 1];
Game::scrVmPub->inparamcount = 0;
Game::scrVmPub->outparamcount = 0;
}
StackIsolation::~StackIsolation()
{
Game::Scr_ClearOutParams();
Game::scrVmPub->inparamcount = this->inParamCount_;
Game::scrVmPub->outparamcount = this->outParamCount_;
Game::scrVmPub->top = this->top_;
Game::scrVmPub->maxStack = this->maxStack_;
}
}

View File

@ -0,0 +1,24 @@
#pragma once
namespace Scripting
{
class StackIsolation final
{
public:
StackIsolation();
~StackIsolation();
StackIsolation(StackIsolation&&) = delete;
StackIsolation(const StackIsolation&) = delete;
StackIsolation& operator=(StackIsolation&&) = delete;
StackIsolation& operator=(const StackIsolation&) = delete;
private:
Game::VariableValue stack_[512]{};
Game::VariableValue* maxStack_;
Game::VariableValue* top_;
unsigned int inParamCount_;
unsigned int outParamCount_;
};
}