LUA_CALL(3) | Library Functions Manual | LUA_CALL(3) |
lua_call
— calls a
function, function indicator [- (nargs + 1), +nresults, e]
#include
<lua.h>
void
lua_call
(lua_State
*L, int nargs,
int nresults);
lua_call
()
calls a function.
To call a function you must use the following protocol: first, the
function to be called is pushed onto the stack; then, the arguments to the
function are pushed in direct order; that is, the first argument is pushed
first. Finally you call lua_call
;
nargs is the number of arguments that you pushed onto
the stack. All arguments and the function value are popped from the stack
when the function is called. The function results are pushed onto the stack
when the function returns. The number of results is adjusted to nresults,
unless nresults is LUA_MULTRET
. In this case, all
results from the function are pushed. Lua takes care that the returned
values fit into the stack space. The function results are pushed onto the
stack in direct order (the first result is pushed first), so that after the
call the last result is on the top of the stack.
Any error inside the called function is propagated upwards (with a longjmp).
The following example shows how the host program can do the equivalent to this Lua code:
a = f("how", t.x, 14)
Here it is in C:
lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */ lua_pushstring(L, "how"); /* 1st argument */ lua_getfield(L, LUA_GLOBALSINDEX, "t"); /* table to be indexed */ lua_getfield(L, -1, "x"); /* push result of t.x (2nd arg) */ lua_remove(L, -2); /* remove 't' from the stack */ lua_pushinteger(L, 14); /* 3rd argument */ lua_call(L, 3, 1); /* call 'f' with 3 arguments and 1 result */ lua_setfield(L, LUA_GLOBALSINDEX, "a"); /* set global 'a' */
Note that the code above is "balanced": at its end, the stack is back to its original configuration. This is considered good programming practice.
Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes, Lua 5.1 Reference Manual.
The lua_call
() manual page is based on Lua
Reference Manual 5.1 and was created by Sergey Bronnikov.
July 19, 2022 | Debian |