diff --git a/apps/twnlua/CMakeLists.txt b/apps/twnlua/CMakeLists.txt index fc05527..558f940 100644 --- a/apps/twnlua/CMakeLists.txt +++ b/apps/twnlua/CMakeLists.txt @@ -1,7 +1,8 @@ -cmake_minimum_required(VERSION 3.21) -cmake_policy(SET CMP0171 NEW) +cmake_minimum_required(VERSION 3.30) project(twnlua LANGUAGES C) +find_package(Python3 COMPONENTS Interpreter) + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() @@ -14,14 +15,13 @@ set(FLAGS add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/game.c - COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/bindgen.py $ENV{TWNROOT}/share/twn_api.json ${FLAGS} > ${CMAKE_CURRENT_SOURCE_DIR}/luabind.c + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/bindgen.py $ENV{TWNROOT}/share/twn_api.json ${FLAGS} > ${CMAKE_CURRENT_SOURCE_DIR}/luabind.c DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bindgen.py $ENV{TWNROOT}/share/twn_api.json - CODEGEN ) add_custom_command( OUTPUT ${TWN_OUT_DIR}/data/scripts/twnapi.lua - COMMAND ${PYTHON3} ${CMAKE_CURRENT_SOURCE_DIR}/docgen.py $ENV{TWNROOT}/share/twn_api.json > ${TWN_OUT_DIR}/data/scripts/twnapi.lua + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/docgen.py $ENV{TWNROOT}/share/twn_api.json > ${TWN_OUT_DIR}/data/scripts/twnapi.lua DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/docgen.py $ENV{TWNROOT}/share/twn_api.json ) diff --git a/apps/twnlua/game.c b/apps/twnlua/game.c index e41a12c..a76e5de 100644 --- a/apps/twnlua/game.c +++ b/apps/twnlua/game.c @@ -147,12 +147,12 @@ static void exchange_lua_states(lua_State *from, lua_State *to, int level, int i void game_tick(void) { if (ctx.initialization_needed) { if (!ctx.udata) - ctx.udata = calloc(1, sizeof (State)); + ctx.udata = SDL_calloc(1, sizeof (State)); State *state = ctx.udata; /* let's init lua */ - lua_State *new_state = luaL_newstate(); + lua_State *new_state = luaL_newstate(custom_alloc); lua_setallocf(new_state, custom_alloc, NULL); /* state existed already, copy its udata over */ @@ -161,7 +161,6 @@ void game_tick(void) { lua_getfield(state->L, -1, "udata"); SDL_assert(!lua_isnoneornil(state->L, -1)); SDL_assert(!lua_isnoneornil(state->L, -2)); - // SDL_TriggerBreakpoint(); if (!lua_isnoneornil(state->L, -1)) { log_info("Exchanging lua states..."); lua_newtable(new_state); @@ -228,7 +227,7 @@ void game_tick(void) { lua_pop(state->L, 1); } - free(game_buf); + SDL_free(game_buf); /* from this point we have access to everything defined in lua */ } @@ -261,5 +260,5 @@ void game_end(void) { State *state = ctx.udata; bindgen_unload_twn(state->L); lua_close(state->L); - free(state); + SDL_free(state); } diff --git a/apps/twnlua/minilua.h b/apps/twnlua/minilua.h index 53d6550..e201324 100644 --- a/apps/twnlua/minilua.h +++ b/apps/twnlua/minilua.h @@ -1513,7 +1513,7 @@ LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode); LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); -LUALIB_API lua_State *(luaL_newstate) (void); +LUALIB_API lua_State *(luaL_newstate) (lua_Alloc alloc); LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx); @@ -21898,8 +21898,8 @@ static void warnfon (void *ud, const char *message, int tocont) { } -LUALIB_API lua_State *luaL_newstate (void) { - lua_State *L = lua_newstate(l_alloc, NULL); +LUALIB_API lua_State *luaL_newstate (lua_Alloc alloc) { + lua_State *L = lua_newstate(alloc ? alloc : l_alloc, NULL); if (l_likely(L)) { lua_atpanic(L, &panic); lua_setwarnf(L, warnfoff, L); /* default is warnings off */ diff --git a/apps/twnlua/state.h b/apps/twnlua/state.h index 2ae3c14..4a6140f 100644 --- a/apps/twnlua/state.h +++ b/apps/twnlua/state.h @@ -1,8 +1,6 @@ #ifndef STATE_H #define STATE_H -#include - #include typedef struct State {