Hello,
When I code a binding, I find myself having helper functions manipulating items on the stack whose index is provided by the caller. Often enough, this index is relative to the stack top.
It happens that I found a bug where the called function used this top-relative index after having itself pushed an item on the stack, thus causing the reference to something unexpected.
I therefore found myself in the need, for the called function, to ensure that the provided stack index is valid whenever it is used. So I coded this awesome piece of software:
__inline int lua_absindex( lua_State * const L, int const _idx)
{
// positive or pseudo-index: return the index, else convert to absolute stack index
return (_idx > 0) ? _idx : (_idx <= LUA_REGISTRYINDEX) ? _idx : (lua_gettop( L) + 1 + _idx);
}
Now, maybe the equivalent already exists in the current API (5.1.4), but I missed it. And in the event it is not the case, maybe this could be considered a useful addition to 5.2 (provided it properly covers all cases, of course)?
Best,
Benoit.