/apps/twnlua: fix for windows, parametrize newstate for alloc func
This commit is contained in:
parent
1cd4bfa638
commit
47799deb8b
@ -1,7 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.21)
|
cmake_minimum_required(VERSION 3.30)
|
||||||
cmake_policy(SET CMP0171 NEW)
|
|
||||||
project(twnlua LANGUAGES C)
|
project(twnlua LANGUAGES C)
|
||||||
|
|
||||||
|
find_package(Python3 COMPONENTS Interpreter)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
set(CMAKE_BUILD_TYPE Debug)
|
set(CMAKE_BUILD_TYPE Debug)
|
||||||
endif()
|
endif()
|
||||||
@ -14,14 +15,13 @@ set(FLAGS
|
|||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/game.c
|
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
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bindgen.py $ENV{TWNROOT}/share/twn_api.json
|
||||||
CODEGEN
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${TWN_OUT_DIR}/data/scripts/twnapi.lua
|
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
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/docgen.py $ENV{TWNROOT}/share/twn_api.json
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -147,12 +147,12 @@ static void exchange_lua_states(lua_State *from, lua_State *to, int level, int i
|
|||||||
void game_tick(void) {
|
void game_tick(void) {
|
||||||
if (ctx.initialization_needed) {
|
if (ctx.initialization_needed) {
|
||||||
if (!ctx.udata)
|
if (!ctx.udata)
|
||||||
ctx.udata = calloc(1, sizeof (State));
|
ctx.udata = SDL_calloc(1, sizeof (State));
|
||||||
|
|
||||||
State *state = ctx.udata;
|
State *state = ctx.udata;
|
||||||
|
|
||||||
/* let's init lua */
|
/* 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);
|
lua_setallocf(new_state, custom_alloc, NULL);
|
||||||
|
|
||||||
/* state existed already, copy its udata over */
|
/* state existed already, copy its udata over */
|
||||||
@ -161,7 +161,6 @@ void game_tick(void) {
|
|||||||
lua_getfield(state->L, -1, "udata");
|
lua_getfield(state->L, -1, "udata");
|
||||||
SDL_assert(!lua_isnoneornil(state->L, -1));
|
SDL_assert(!lua_isnoneornil(state->L, -1));
|
||||||
SDL_assert(!lua_isnoneornil(state->L, -2));
|
SDL_assert(!lua_isnoneornil(state->L, -2));
|
||||||
// SDL_TriggerBreakpoint();
|
|
||||||
if (!lua_isnoneornil(state->L, -1)) {
|
if (!lua_isnoneornil(state->L, -1)) {
|
||||||
log_info("Exchanging lua states...");
|
log_info("Exchanging lua states...");
|
||||||
lua_newtable(new_state);
|
lua_newtable(new_state);
|
||||||
@ -228,7 +227,7 @@ void game_tick(void) {
|
|||||||
lua_pop(state->L, 1);
|
lua_pop(state->L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(game_buf);
|
SDL_free(game_buf);
|
||||||
|
|
||||||
/* from this point we have access to everything defined in lua */
|
/* from this point we have access to everything defined in lua */
|
||||||
}
|
}
|
||||||
@ -261,5 +260,5 @@ void game_end(void) {
|
|||||||
State *state = ctx.udata;
|
State *state = ctx.udata;
|
||||||
bindgen_unload_twn(state->L);
|
bindgen_unload_twn(state->L);
|
||||||
lua_close(state->L);
|
lua_close(state->L);
|
||||||
free(state);
|
SDL_free(state);
|
||||||
}
|
}
|
||||||
|
@ -1513,7 +1513,7 @@ LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
|
|||||||
const char *name, const char *mode);
|
const char *name, const char *mode);
|
||||||
LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);
|
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);
|
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) {
|
LUALIB_API lua_State *luaL_newstate (lua_Alloc alloc) {
|
||||||
lua_State *L = lua_newstate(l_alloc, NULL);
|
lua_State *L = lua_newstate(alloc ? alloc : l_alloc, NULL);
|
||||||
if (l_likely(L)) {
|
if (l_likely(L)) {
|
||||||
lua_atpanic(L, &panic);
|
lua_atpanic(L, &panic);
|
||||||
lua_setwarnf(L, warnfoff, L); /* default is warnings off */
|
lua_setwarnf(L, warnfoff, L); /* default is warnings off */
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
#ifndef STATE_H
|
#ifndef STATE_H
|
||||||
#define STATE_H
|
#define STATE_H
|
||||||
|
|
||||||
#include <lua.h>
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef struct State {
|
typedef struct State {
|
||||||
|
Loading…
Reference in New Issue
Block a user