[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Possible bug?
- From: Rici Lake <lua@...>
- Date: Wed, 12 Oct 2005 22:55:42 -0500
On 12-Oct-05, at 10:44 PM, David Morris-Oliveros wrote:
It asserts on line 4 of the code below. Now my question is, is it
supposed to be L->ci->top or just L->top? Because lua_gettop() is
(L->top - L->base), and like 9 below is very similar to this.
L->ci->top is the end of the allocated stack (allocated in the sense
that you've done lua_checkstack() to make sure that you have that stack
space available; if you don't do that, you have 20 slots.) L->top is
the top of the actual stack.
If L->ci->top < L->top, something evil has happened (this could happen
if you didn't do a lua_checkstack(), but in that case the index would
be >20).
It's not an api error to refer to a stack slot that has been allocated,
even if it is beyond the end of the current stack. (Although it's
highly questionable.) On the other hand, a negative index greater than
the current end is clearly a non-existent stack slot. That's why those
two lines are different.
I wonder if your problem has to do with the fact that there are two
stacks in play when you're doing coroutines. It's pretty easy to use
the wrong one by mistake.
Rici