From d692035039c8deb6dbddec14f3618a0c02614cbe Mon Sep 17 00:00:00 2001 From: Allanis Date: Sat, 29 Jun 2013 17:58:01 +0100 Subject: [PATCH] [Add] Lua wrappers for luaL_newState and luaopen_base. --- src/ai.c | 2 +- src/conf.c | 5 ++--- src/llua.c | 22 ++++++++++++++++++++++ src/llua.h | 6 +++++- src/mission.c | 7 ++++--- src/music.c | 2 +- 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/ai.c b/src/ai.c index d1c3ac4..ecdfa00 100644 --- a/src/ai.c +++ b/src/ai.c @@ -262,7 +262,7 @@ static int ai_loadProfile(char* filename) { strlen(filename)-strlen(AI_PREFIX)-strlen(AI_SUFFIX)+1, "%s", filename+strlen(AI_PREFIX)); - profiles[nprofiles-1].L = luaL_newstate(); + profiles[nprofiles-1].L = llua_newState(); if(profiles[nprofiles-1].L == NULL) { ERR("Unable to create a new Lua state"); diff --git a/src/conf.c b/src/conf.c index 762f862..eb7148c 100644 --- a/src/conf.c +++ b/src/conf.c @@ -3,9 +3,8 @@ #include #include -#include "lua.h" +#include "llua.h" #include "lauxlib.h" -#include "lualib.h" #include "lephisto.h" #include "log.h" @@ -97,7 +96,7 @@ int conf_loadConfig(const char* file) { int i = 0; double d = 0.; - lua_State* L = luaL_newstate(); + lua_State* L = llua_newState(); if(luaL_dofile(L, file) == 0) { /* Conf file exists indeed. */ /* Global. */ diff --git a/src/llua.c b/src/llua.c index ea91206..7bdec63 100644 --- a/src/llua.c +++ b/src/llua.c @@ -64,6 +64,28 @@ static const luaL_reg tk_methods[] = { { 0, 0 } }; +/* Wrapper around luaL_newstate. */ +lua_State* llua_newState(void) { + lua_State* L; + /* Try to create the new state. */ + L = luaL_newstate(); + if(L == NULL) { + WARN("Failed to create new lua state."); + return NULL; + } + + return L; +} + +/* Load a specially modified version of base. */ +int llua_loadBase(lua_State* L) { + luaopen_base(L); /* Open base. */ + + /* replace package.loaders with custom one. */ + + return 0; +} + /* Individual libraries. */ int lua_loadLephisto(lua_State* L) { luaL_register(L, "lephisto", lephisto_methods); diff --git a/src/llua.h b/src/llua.h index 2d2fc88..916ab6c 100644 --- a/src/llua.h +++ b/src/llua.h @@ -1,7 +1,11 @@ #pragma once #include "lua.h" -/* Individual libraries. */ +/* Standard lua stuff wrappers. */ +lua_State* llua_newState (void); /* Creates a new state */ +int llua_loadBase(lua_State* L); + +/* Individual custom libraries. */ int lua_loadLephisto(lua_State* L); /* Always read only. */ int lua_loadSpace(lua_State* L, int readonly); int lua_loadTime(lua_State* L, int readonly); diff --git a/src/mission.c b/src/mission.c index fe3409e..027753e 100644 --- a/src/mission.c +++ b/src/mission.c @@ -2,6 +2,7 @@ #include #include +#include "llua.h" #include "lluadef.h" #include "rng.h" @@ -100,13 +101,13 @@ static int mission_init(Mission* mission, MissionData* misn, int load) { mission->data = misn; /* Init lua. */ - mission->L = luaL_newstate(); + mission->L = llua_newState(); if(mission->L == NULL) { ERR("Unable to create a new lua state."); return -1; } - luaopen_base(mission->L); /* Can be useful. */ + llua_loadBase(mission->L); /* Pairs and such. */ luaopen_string(mission->L); /* string.format can be very useful. */ misn_loadLibs(mission->L); /* Load our custom libraries. */ @@ -152,7 +153,7 @@ static int mission_meetCond(MissionData* misn) { if(mission_cond_L == NULL) { /* Must create the conditional environment. */ - mission_cond_L = luaL_newstate(); + mission_cond_L = llua_newState(); misn_loadCondLibs(mission_cond_L); } diff --git a/src/music.c b/src/music.c index e555963..4706871 100644 --- a/src/music.c +++ b/src/music.c @@ -371,7 +371,7 @@ static int music_luaInit(void) { if(music_lua != NULL) music_luaQuit(); - music_lua = luaL_newstate(); + music_lua = llua_newState(); /*luaL_openlibs(music_lua); */