@@ -40,7 +40,8 @@ Debugger::Debugger(lua_State *L, EmmyDebuggerManager *manager)
4040 hookState(nullptr ),
4141 running(false ),
4242 skipHook(false ),
43- blocking(false ) {
43+ blocking(false ),
44+ arenaRef(nullptr ) {
4445}
4546
4647Debugger::~Debugger () {
@@ -200,7 +201,9 @@ bool Debugger::GetStacks(std::vector<Stack> &stacks) {
200201 // add local variable
201202 auto var = stack.variableArena ->Alloc ();
202203 var->name = name;
204+ SetVariableArena (stack.variableArena .get ());
203205 GetVariable (L, var, -1 , 1 );
206+ ClearVariableArenaRef ();
204207 lua_pop (L, 1 );
205208 stack.localVariables .push_back (var);
206209 }
@@ -216,7 +219,9 @@ bool Debugger::GetStacks(std::vector<Stack> &stacks) {
216219 // add up variable
217220 auto var = stack.variableArena ->Alloc ();
218221 var->name = name;
222+ SetVariableArena (stack.variableArena .get ());
219223 GetVariable (L, var, -1 , 1 );
224+ ClearVariableArenaRef ();
220225 lua_pop (L, 1 );
221226 stack.upvalueVariables .push_back (var);
222227 }
@@ -793,6 +798,18 @@ EmmyDebuggerManager *Debugger::GetEmmyDebuggerManager() {
793798 return manager;
794799}
795800
801+ void Debugger::SetVariableArena (Arena<Variable> *arena) {
802+ arenaRef = arena;
803+ }
804+
805+ Arena<Variable> * Debugger::GetVariableArena () {
806+ return arenaRef;
807+ }
808+
809+ void Debugger::ClearVariableArenaRef () {
810+ arenaRef = nullptr ;
811+ }
812+
796813int Debugger::GetStackLevel (bool skipC) const {
797814 if (!currentL) {
798815 return 0 ;
@@ -898,7 +915,9 @@ bool Debugger::DoEval(std::shared_ptr<EvalContext> evalContext) {
898915 lua_getfield (L, LUA_REGISTRYINDEX, CACHE_TABLE_NAME);// 1: cacheTable|nil
899916 if (lua_type (L, -1 ) == LUA_TTABLE) {
900917 lua_getfield (L, -1 , std::to_string (evalContext->cacheId ).c_str ());// 1: cacheTable, 2: value
918+ SetVariableArena (evalContext->result .GetArena ());
901919 GetVariable (L, evalContext->result , -1 , evalContext->depth );
920+ ClearVariableArenaRef ();
902921 lua_pop (L, 2 );
903922 return true ;
904923 }
@@ -937,7 +956,9 @@ bool Debugger::DoEval(std::shared_ptr<EvalContext> evalContext) {
937956 r = lua_pcall (L, 0 , 1 , 0 );
938957 if (r == LUA_OK) {
939958 evalContext->result ->name = evalContext->expr ;
959+ SetVariableArena (evalContext->result .GetArena ());
940960 GetVariable (L, evalContext->result , -1 , evalContext->depth );
961+ ClearVariableArenaRef ();
941962 lua_pop (L, 1 );
942963 return true ;
943964 }
0 commit comments