[pure-lang-svn] SF.net SVN: pure-lang:[554] pure/trunk/interpreter.cc
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-08-20 21:08:28
|
Revision: 554 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=554&view=rev Author: agraef Date: 2008-08-20 21:08:37 +0000 (Wed, 20 Aug 2008) Log Message: ----------- Bugfix in code collecting temporaries. Modified Paths: -------------- pure/trunk/interpreter.cc Modified: pure/trunk/interpreter.cc =================================================================== --- pure/trunk/interpreter.cc 2008-08-20 20:53:28 UTC (rev 553) +++ pure/trunk/interpreter.cc 2008-08-20 21:08:37 UTC (rev 554) @@ -3468,22 +3468,15 @@ else fptr->refc--; fptr = save_fptr; - if (!res) { + if (estk.empty()) { // collect garbage pure_expr *t = tmps; while (t) { pure_expr *next = t->xp; - pure_freenew(t); + if (t != res) pure_freenew(t); t = next; } } -#if DEBUG>1 - pure_expr *t = tmps; - while (t) { - if (t != res) std::cerr << "uncollected temporary: " << t << endl; - t = t->xp; - } -#endif // NOTE: Result (if any) is to be freed by the caller. return res; } @@ -3625,21 +3618,16 @@ globalvars.erase(tag); } } + } + if (estk.empty()) { // collect garbage pure_expr *t = tmps; while (t) { pure_expr *next = t->xp; - pure_freenew(t); + if (t != res) pure_freenew(t); t = next; } } -#if DEBUG>1 - pure_expr *t = tmps; - while (t) { - if (t != res) std::cerr << "uncollected temporary: " << t << endl; - t = t->xp; - } -#endif // NOTE: Result (if any) is to be freed by the caller. return res; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |