[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Possible bug?
- From: Mike Pall <mikelu-0510@...>
- Date: Thu, 13 Oct 2005 13:51:50 +0200
Hi,
David Morris-Oliveros wrote:
> // the function been called has a deliberate error
> int result = lua_resume( L, 0 );
>
> [
> L->top - L->base = 5
> L->ci->top - L->base = 2
> result = LUA_ERRRUN
> ]
Well, maybe inspecting the slots of the top-most frame of
a dead coroutine is relying on undocumented behaviour. Apart
from its stack slots you'll find several strings from error
message generation lying around.
In this example there are 5-2 = 3 strings on the top of the
stack: the plain error message, the error message including
the source file/line and another copy of the latter.
But yes, breaking the assumption that L->ci->top >= L->top
could be called a bug. Mainly because it doesn't play well
with other API functions.
Simple fix: add the following line in ldo.c at the end of
luaD_seterrorobj():
if (L->top > L->ci->top) L->ci->top = L->top;
Bye,
Mike