Change how builtin functions are loaded, better error checking

This commit is contained in:
2022-03-16 17:05:20 -04:00
parent 3b1c3e022a
commit c1ce1bfcc0
5 changed files with 184 additions and 99 deletions

View File

@@ -475,18 +475,20 @@ private:
const char *name_;
const char *args_;
const char *docs_;
bool sandbox_;
lua_CFunction func_;
LuaFunctionReg *next_;
public:
static LuaFunctionReg *All;
LuaFunctionReg(const char *name, const char *args, const char *docs, lua_CFunction f);
LuaFunctionReg(const char *name, const char *args, const char *docs, bool sand, lua_CFunction f);
static const LuaFunctionReg *lookup(lua_CFunction fn);
const char *get_name() const { return name_; }
const char *get_args() const { return args_; }
const char *get_docs() const { return docs_; }
lua_CFunction get_func() const { return func_; }
bool get_sandbox() const { return sandbox_; }
LuaFunctionReg *next() const { return next_; }
void set_func(lua_CFunction fn) { func_ = fn; }
};
@@ -494,13 +496,19 @@ public:
#define LuaDefine(name, args, docs) \
int lfn_##name(lua_State *L); \
LuaFunctionReg reg_##name(#name, args, docs, lfn_##name); \
LuaFunctionReg reg_##name(#name, args, docs, false, lfn_##name); \
int lfn_##name(lua_State *L)
#define LuaSandbox(name, args, docs) \
int lfn_##name(lua_State *L); \
LuaFunctionReg reg_##name(#name, args, docs, true, lfn_##name); \
int lfn_##name(lua_State *L)
#define LuaDefineBuiltin(name, args, docs) \
LuaFunctionReg reg_##name(#name, args, docs, nullptr);
LuaFunctionReg reg_##name(#name, args, docs, false, nullptr);
#define LuaSandboxBuiltin(name, args, docs) \
LuaFunctionReg reg_##name(#name, args, docs, true, nullptr);
#define LuaStringify(x) #x
#define LuaAssert(L, x) if (!(x)) { luaL_error((L), "Assert failed: %s (file %s line %d)", LuaStringify(x), __FILE__, __LINE__); }