diff options
Diffstat (limited to 'crawl-ref/source/clua.cc')
-rw-r--r-- | crawl-ref/source/clua.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/crawl-ref/source/clua.cc b/crawl-ref/source/clua.cc index fac00a74dd..ae30763ab3 100644 --- a/crawl-ref/source/clua.cc +++ b/crawl-ref/source/clua.cc @@ -69,6 +69,7 @@ static int _clua_panic(lua_State *); static void _clua_throttle_hook(lua_State *, lua_Debug *); static void *_clua_allocator(void *ud, void *ptr, size_t osize, size_t nsize); static int _clua_guarded_pcall(lua_State *); +static int _clua_require(lua_State *); static int _clua_dofile(lua_State *); static int _clua_loadfile(lua_State *); @@ -637,6 +638,8 @@ void CLua::init_lua() lua_register(_state, "loadfile", _clua_loadfile); lua_register(_state, "dofile", _clua_dofile); + lua_register(_state, "require", _clua_require); + execfile("clua/util.lua", true, true); if (managed_vm) @@ -2929,6 +2932,20 @@ static int _clua_loadfile(lua_State *ls) return (1); } +static int _clua_require(lua_State *ls) +{ + const char *file = luaL_checkstring(ls, 1); + if (!file) + return (0); + + CLua &vm(CLua::get_vm(ls)); + if (vm.execfile(file, false, false) != 0) + luaL_error(ls, vm.error.c_str()); + + lua_pushboolean(ls, true); + return (1); +} + static int _clua_dofile(lua_State *ls) { const char *file = luaL_checkstring(ls, 1); |