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 | |
| parent | 9cb400e05c160ffcca643a6273769d55aefb26b3 (diff) | |
| download | scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.tar.gz scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.tar.bz2 scummvm-rg350-536bc29e547c7a5c62eb5fec8201067912dc6e15.zip | |
DIRECTOR: Lingo: Improved localvars cleanup
| -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) { | 
