lua-users home
lua-l archive

Re: Lua C API can't be used from other languages without C wrappers

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


>>>>> "albertmcchan" == albertmcchan <albertmcchan@yahoo.com> writes:
 albertmcchan> Had not expected calling B shared the same lua stack.
 albertmcchan> Is there a way to force calling B, C, ... with a new
 albertmcchan> stack ? (like in lua ?)
Of course there is, you use lua_pushcfuncfion and lua_call, as I pointed
out to you before.
int B(lua_State *L)
{
 lua_settop(L, 0);
 lua_pushstring(L, "foo!");
 return 1;
}
int A(lua_State *L)
{
 /* stack currently has args of A if any */
 lua_pushstring(L, "bar!");
 /* this calls B in A's stack frame, so it will clobber the
 * string pushed above and any args, leaving A's stack with
 * just B's "foo!" on it
 */
 B(L);
 /* but this calls B on a brand new stack frame of its own,
 * so the existing "foo!" remains on the stack and another
 * one is pushed on top
 */
 lua_pushcfunction(L, B);
 lua_call(L, 0, 1); /* 0 args, 1 result */
 /* stack now has just "foo!", "foo!" */
 return 2;
}
This is how you do it if B and A both need to be independently callable
from Lua but A needs to call B.
-- 
Andrew.

AltStyle によって変換されたページ (->オリジナル) /