26 enum api_types *parg_types,
28 enum api_types *preturn_types);
43 enum api_types *parg_types,
45 enum api_types *preturn_types)
51 pfunc->arg_types = parg_types;
53 pfunc->return_types = preturn_types;
84 for (
auto const &qfunc_name :
fcl->funcs->keys()) {
85 char *func_name = qfunc_name.toLocal8Bit().data();
88 auto *pfunc =
fcl->funcs->value(func_name);
89 if (pfunc->required) {
90 missing_func_required->append(func_name);
92 missing_func_optional->append(func_name);
110 api_types *parg_types;
111 api_types *pret_types;
117 if (
fcl->funcs->contains(func_name)) {
122 pfunc =
fcl->funcs->value(func_name);
123 parg_types =
new api_types[
nargs]();
124 pret_types =
new api_types[
nreturns]();
126 for (i = 0; i <
nargs; i++) {
127 *(parg_types + i) = api_types(va_arg(args,
int));
131 *(pret_types + i) = api_types(va_arg(args,
int));
135 fcl->funcs->insert(func_name, pfunc);
157 for (
auto *a : qAsConst(*
fcl->funcs)) {
161 fcl->funcs =
nullptr;
172 if (
fcl->funcs ==
nullptr) {
174 fcl->funcs =
new QHash<QString, luascript_func *>;
189 bool success =
false;
195 if (!(
fcl->funcs->contains(func_name))) {
197 "Lua function '%s' does not exist, "
198 "so cannot be invoked.",
202 pfunc =
fcl->funcs->value(func_name);
204 lua_getglobal(
fcl->state, func_name);
206 if (!lua_isfunction(
fcl->state, -1)) {
210 lua_pop(
fcl->state, 1);
241 va_start(args, func_name);
259 if (!
fcl->funcs->contains(func_name)) {
264 pfunc =
fcl->funcs->value(func_name);
#define fc_assert_ret(condition)
#define fc_assert_ret_val(condition, val)
void luascript_pop_returns(struct fc_lua *fcl, const char *func_name, int nreturns, enum api_types *preturn_types, va_list args)
Pop return values from the Lua stack.
void luascript_push_args(struct fc_lua *fcl, int nargs, enum api_types *parg_types, va_list args)
Push arguments into the Lua stack.
bool luascript_check_function(struct fc_lua *fcl, const char *funcname)
Return if the function 'funcname' is define in the lua state 'fcl->state'.
void luascript_log(struct fc_lua *fcl, QtMsgType level, const char *format,...)
Print a message to the selected output handle.
int luascript_call(struct fc_lua *fcl, int narg, int nret, const char *code)
Evaluate a Lua function call or loaded script on the stack.
bool luascript_func_call_valist(struct fc_lua *fcl, const char *func_name, va_list args)
Call a lua function; return value is TRUE if no errors occurred, otherwise FALSE.
static void func_destroy(struct luascript_func *pfunc)
Free a function definition.
void luascript_func_init(struct fc_lua *fcl)
Initialize the structures needed to save functions definitions.
void luascript_func_add(struct fc_lua *fcl, const char *func_name, bool required, int nargs, int nreturns,...)
Add a lua function.
static struct luascript_func * func_new(bool required, int nargs, enum api_types *parg_types, int nreturns, enum api_types *preturn_types)
Create a new function definition.
bool luascript_func_call(struct fc_lua *fcl, const char *func_name,...)
Call a lua function; return value is TRUE if no errors occurred, otherwise FALSE.
void luascript_func_add_valist(struct fc_lua *fcl, const char *func_name, bool required, int nargs, int nreturns, va_list args)
Add a lua function.
bool luascript_func_is_required(struct fc_lua *fcl, const char *func_name)
Return iff the function is required.
bool luascript_func_check(struct fc_lua *fcl, QVector< QString > *missing_func_required, QVector< QString > *missing_func_optional)
Test if all function are defines.
void luascript_func_free(struct fc_lua *fcl)
Free the function definitions.
static void static sol::state * fcl
Lua virtual machine state.
enum api_types * arg_types
enum api_types * return_types