summaryrefslogtreecommitdiffstats
path: root/src/scripting
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting')
-rw-r--r--src/scripting/ffi.c62
-rw-r--r--src/scripting/ffi.h1
2 files changed, 31 insertions, 32 deletions
diff --git a/src/scripting/ffi.c b/src/scripting/ffi.c
index 35ba6f2..16d33ef 100644
--- a/src/scripting/ffi.c
+++ b/src/scripting/ffi.c
@@ -39,7 +39,6 @@ static struct ffi_namespace root = {
NULL,
NULL,
};
-static int call_arg_index;
static void ffi_register_functions_in_namespace(lua_State *l,
struct ffi_namespace *parent);
@@ -149,9 +148,8 @@ ffi_handle_function(lua_State *l)
{
struct ffi_function *fn;
- call_arg_index = 0;
-
fn = (struct ffi_function *) lua_touserdata(l, lua_upvalueindex(1));
+ fn->call_arg_index = 0;
fn->func(fn);
return 0;
@@ -165,97 +163,97 @@ void ffi_context_switch(struct script *script)
int
ffi_stack_get_bool(struct ffi_function *fn)
{
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- if (!lua_isboolean(ctx->lua_state, call_arg_index)) {
+ if (!lua_isboolean(ctx->lua_state, fn->call_arg_index)) {
warn("Bad argument #%d to %s:%s() (boolean expected)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- return lua_toboolean(ctx->lua_state, call_arg_index);
+ return lua_toboolean(ctx->lua_state, fn->call_arg_index);
}
int
ffi_stack_get_int(struct ffi_function *fn)
{
#if LUA_VERSION_NUM <= 501
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- return lua_tointeger(ctx->lua_state, call_arg_index);
+ return lua_tointeger(ctx->lua_state, fn->call_arg_index);
#elif LUA_VERSION_NUM == 502
int v;
int is_int;
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- v = lua_tointegerx(ctx->lua_state, call_arg_index, &is_int);
+ v = lua_tointegerx(ctx->lua_state, fn->call_arg_index, &is_int);
if (!is_int) {
warn("Bad argument #%d to %s:%s() (integer expected)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
return v;
#elif LUA_VERSION_NUM >= 503
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- if (!lua_isinteger(ctx->lua_state, call_arg_index)) {
+ if (!lua_isinteger(ctx->lua_state, fn->call_arg_index)) {
warn("Bad argument #%d to %s:%s() (integer expected)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- return lua_tointeger(ctx->lua_state, call_arg_index);
+ return lua_tointeger(ctx->lua_state, fn->call_arg_index);
#endif
}
double
ffi_stack_get_float(struct ffi_function *fn)
{
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- if (!lua_isnumber(ctx->lua_state, call_arg_index)) {
+ if (!lua_isnumber(ctx->lua_state, fn->call_arg_index)) {
warn("Bad argument #%d to %s:%s() (number expected)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- return lua_tonumber(ctx->lua_state, call_arg_index);
+ return lua_tonumber(ctx->lua_state, fn->call_arg_index);
}
const char *
ffi_stack_get_string(struct ffi_function *fn)
{
- if (lua_gettop(ctx->lua_state) < ++call_arg_index) {
+ if (lua_gettop(ctx->lua_state) < ++fn->call_arg_index) {
warn("Bad argument #%d to %s:%s() (no value)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- if (!lua_isstring(ctx->lua_state, call_arg_index)) {
+ if (!lua_isstring(ctx->lua_state, fn->call_arg_index)) {
warn("Bad argument #%d to %s:%s() (string expected)",
- call_arg_index, fn->ns->full_name, fn->name);
+ fn->call_arg_index, fn->ns->full_name, fn->name);
return 0;
}
- return lua_tostring(ctx->lua_state, call_arg_index);
+ return lua_tostring(ctx->lua_state, fn->call_arg_index);
}
void
ffi_prepare_call(const char *func)
{
lua_getglobal(ctx->lua_state, func);
- call_arg_index = 0;
+ ctx->call_arg_index = 0;
}
void
@@ -285,7 +283,7 @@ ffi_stack_set_string(const char *v)
void
ffi_call(void)
{
- if (lua_pcall(ctx->lua_state, call_arg_index, 0, 0) != LUA_OK) {
+ if (lua_pcall(ctx->lua_state, ctx->call_arg_index, 0, 0) != LUA_OK) {
err(1, "Error calling function: %s\n",
lua_tostring(ctx->lua_state, -1));
}
diff --git a/src/scripting/ffi.h b/src/scripting/ffi.h
index fa3eb56..8749039 100644
--- a/src/scripting/ffi.h
+++ b/src/scripting/ffi.h
@@ -24,6 +24,7 @@
struct ffi_function {
const char *name;
struct ffi_namespace *ns;
+ int call_arg_index;
void (*func)(struct ffi_function *);
struct ffi_function *next;
};