diff options
author | Eugene Sandulenko | 2017-01-13 19:10:35 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2017-01-13 19:10:35 +0100 |
commit | 536bc29e547c7a5c62eb5fec8201067912dc6e15 (patch) | |
tree | 1ff52fe842df2b79e57f336a04fd4d6c4c61dea6 /engines | |
parent | 9cb400e05c160ffcca643a6273769d55aefb26b3 (diff) | |
download | scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.tar.gz scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.tar.bz2 scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.zip |
DIRECTOR: Lingo: Improved localvars cleanup
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/lingo/lingo-codegen.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
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) { |