[pure-lang-svn] SF.net SVN: pure-lang: [99] pure/trunk
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-05-18 10:04:34
|
Revision: 99 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=99&view=rev Author: agraef Date: 2008-05-18 03:04:41 -0700 (Sun, 18 May 2008) Log Message: ----------- Vector implementation of shadow stack is too heavy, try STL stack instead. Modified Paths: -------------- pure/trunk/interpreter.hh pure/trunk/runtime.cc Modified: pure/trunk/interpreter.hh =================================================================== --- pure/trunk/interpreter.hh 2008-05-18 09:51:44 UTC (rev 98) +++ pure/trunk/interpreter.hh 2008-05-18 10:04:41 UTC (rev 99) @@ -12,6 +12,7 @@ #include <llvm/Support/LLVMBuilder.h> #include <time.h> +#include <stack> #include <set> #include <string> #include "expr.hh" @@ -394,7 +395,7 @@ map<int32_t,GlobalVar> globalvars; map<int32_t,Env> globalfuns; list<pure_exception> estk; - vector<pure_expr*> sstk; + stack<pure_expr*> sstk; #if DEBUG set<pure_expr*> mem_allocations; #endif Modified: pure/trunk/runtime.cc =================================================================== --- pure/trunk/runtime.cc 2008-05-18 09:51:44 UTC (rev 98) +++ pure/trunk/runtime.cc 2008-05-18 10:04:41 UTC (rev 99) @@ -683,17 +683,9 @@ { va_list ap; interpreter& interp = *interpreter::g_interp; - size_t cap = interp.sstk.capacity(), sz = interp.sstk.size(); - if (cap < sz+MAXARGS) { - if (sz == 0) - cap = 0x10000; // 64K - else - cap = cap << 1; - interp.sstk.reserve(cap); - } va_start(ap, x); while (x) { - interp.sstk.push_back(x); + interp.sstk.push(x); if (x->refc > 0) x->refc++; else @@ -708,7 +700,6 @@ { va_list ap; interpreter& interp = *interpreter::g_interp; - size_t count = 0; va_start(ap, x); if (x) x->refc++; while (1) { @@ -718,12 +709,9 @@ x->refc--; else pure_free_internal(x); - count++; + interp.sstk.pop(); }; va_end(ap); - size_t sz = interp.sstk.size(); - assert(sz >= count); - interp.sstk.resize(sz-count); } extern "C" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |