mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Modify PUC Lua to wrap C++ exceptions (#12445)
This commit is contained in:
parent
f916398a54
commit
03428d9825
7 changed files with 105 additions and 4 deletions
|
@ -137,6 +137,18 @@ LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) {
|
|||
}
|
||||
|
||||
|
||||
/* MINETEST-SPECIFIC CHANGE */
|
||||
LUA_API lua_CFunctionwrapper lua_atccall (lua_State *L,
|
||||
lua_CFunctionwrapper wrapf) {
|
||||
lua_CFunctionwrapper old;
|
||||
lua_lock(L);
|
||||
old = G(L)->wrapcf;
|
||||
G(L)->wrapcf = wrapf;
|
||||
lua_unlock(L);
|
||||
return old;
|
||||
}
|
||||
|
||||
|
||||
LUA_API lua_State *lua_newthread (lua_State *L) {
|
||||
lua_State *L1;
|
||||
lua_lock(L);
|
||||
|
|
|
@ -317,7 +317,11 @@ int luaD_precall (lua_State *L, StkId func, int nresults) {
|
|||
if (L->hookmask & LUA_MASKCALL)
|
||||
luaD_callhook(L, LUA_HOOKCALL, -1);
|
||||
lua_unlock(L);
|
||||
n = (*curr_func(L)->c.f)(L); /* do the actual call */
|
||||
/* MINETEST-SPECIFIC CHANGE: Let custom code wrap C function calls. */
|
||||
if (G(L)->wrapcf)
|
||||
n = G(L)->wrapcf(L, *curr_func(L)->c.f);
|
||||
else
|
||||
n = (*curr_func(L)->c.f)(L);
|
||||
lua_lock(L);
|
||||
if (n < 0) /* yielding? */
|
||||
return PCRYIELD;
|
||||
|
|
|
@ -166,6 +166,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
|
|||
setnilvalue(registry(L));
|
||||
luaZ_initbuffer(L, &g->buff);
|
||||
g->panic = NULL;
|
||||
g->wrapcf = NULL; /* MINETEST-SPECIFIC CHANGE */
|
||||
g->gcstate = GCSpause;
|
||||
g->rootgc = obj2gco(L);
|
||||
g->sweepstrgc = 0;
|
||||
|
|
|
@ -86,6 +86,7 @@ typedef struct global_State {
|
|||
int gcpause; /* size of pause between successive GCs */
|
||||
int gcstepmul; /* GC `granularity' */
|
||||
lua_CFunction panic; /* to be called in unprotected errors */
|
||||
lua_CFunctionwrapper wrapcf; /* MINETEST-SPECIFIC CHANGE */
|
||||
TValue l_registry;
|
||||
struct lua_State *mainthread;
|
||||
UpVal uvhead; /* head of double-linked list of all open upvalues */
|
||||
|
|
|
@ -113,6 +113,11 @@ LUA_API lua_State *(lua_newthread) (lua_State *L);
|
|||
|
||||
LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
|
||||
|
||||
/* MINETEST-SPECIFIC CHANGE: Let custom code wrap C function calls. */
|
||||
typedef int (*lua_CFunctionwrapper)(lua_State *L, lua_CFunction f);
|
||||
LUA_API lua_CFunctionwrapper (lua_atccall) (lua_State *L,
|
||||
lua_CFunctionwrapper wrapf);
|
||||
|
||||
|
||||
/*
|
||||
** basic stack manipulation
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue