[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: new API easier to use? (was: Embedding Lua for use in a MUD.)
- From: Edgar Toernig <froese@...>
- Date: Thu, 15 Mar 2001 00:47:22 +0100
> Christian Vogler wrote:
> > I propose a small enhancement to the API that IMHO would result in a
> > huge improvement in usability: Let every function that pushes a result
> > on the stack return the stack index of the result.
Nice idea. It happened a couple of time to me that I wrote a stack usage
diagram beside a function to get the indexes right ;-) The most hairy
thing is passing negative indexes around.
Roberto Ierusalimschy wrote:
> We thought about that for Lua 4.0, but it brings a performance problem.
> In many machines (Linux, for instance), the size of a TObject is not
> a power of 2, and so the difference between two (TObject *) is not
> an efficient operation.
Hmm... right. How about then exporting a lua_StkId? Something like this:
lua_StkId lua_index(lua_State *L, int index);
lua_StkId lua_s_pushvalue(lua_State *L, lua_StkId ref);
plus some compatibility functions:
#define lua_pushvalue(L,i) lua_s_pushvalue((L), lua_index((L),(i)))
By using these new "s_" functions you could even become faster. Only
downside I see is that for this to work the Lua stack has to be fixed
(at least while within a C function). May limit future changes...
If the lua_StkId is fully defined you could even perform arithmetic
on it (i.e. lua_s_pushvalue(L, x+1)). And one could pass the Cbase
to the C function as a second argument...