[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: stack/memory problem
- From: Peter Pimley <peter.pimley@...>
- Date: Wed, 14 Dec 2011 12:15:58 +0000
Don't reduce your stack "periodically", pop all results after every
lua_call / lua_pcall, after copying them to somewhere else if you need
to keep their values.
If you're in C++, it might be useful to have a RAII-style stack based
object that, in its destructor, asserts that the stack is in the
correct state.  Something like the following untested code:
struct StackCheck
{
  StackCheck (lua_State * lua) : lua(lua), top (lua_gettop(lua)) {}
  ~StackCheck () { if (lua_gettop(lua) != top) /* assert, throw
exception, whatever */ ;}
  const int top;
  lua_State * const lua;
};
// and then later on...
{
  StackCheck s (lua);
  // push function, arguments
  lua_call(lua, ......);
  // examine results
  // pop all results
} // s's destructor checks for stack overflow / underflow.
An exercise for the reader is to adapt StackCheck to have another
constructor argument, which is how many *extra* values are expected to
be on the stack when the destructor runs.