From 536bc29e547c7a5c62eb5fec8201067912dc6e15 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Fri, 13 Jan 2017 19:10:35 +0100 Subject: DIRECTOR: Lingo: Improved localvars cleanup --- engines/director/lingo/lingo-codegen.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'engines') diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp index b30bf03cde..da5c8de35e 100644 --- a/engines/director/lingo/lingo-codegen.cpp +++ b/engines/director/lingo/lingo-codegen.cpp @@ -192,11 +192,19 @@ Symbol *Lingo::lookupVar(const char *name, bool create, bool putInGlobalList) { void Lingo::cleanLocalVars() { // Clean up current scope local variables and clean up memory + debugC(3, kDebugLingoExec, "cleanLocalVars: have %d vars", _localvars->size()); + for (SymbolHash::const_iterator h = _localvars->begin(); h != _localvars->end(); ++h) { - if (!h->_value->global) - delete h->_value; + if (!h->_value->global) { + Symbol *sym = h->_value; + free(sym->name); + delete sym; + } } + delete g_lingo->_localvars; + + g_lingo->_localvars = 0; } void Lingo::define(Common::String &name, int start, int nargs, Common::String *prefix, int end) { -- cgit v1.2.3