mirror of
https://github.com/holub/mame
synced 2025-05-03 13:06:47 +03:00

Compile Lua as C++. When Lua is compiled as C, it uses setjmp/longjmp for error handling, resulting in failure to unwind intermediate stack frames. Trying to ensure no objects with non-trivial destructors are in scope when raising a Lua error is error-prone. In particular, converting an exception to a Lua error becomes convoluted, and raising a Lua error from a constructor is effectively impossible. Updated Lua to 5.4.4 - this includes a brand-new garbage collector implementation with better performance. The main thing removed is the deprecated bitlib. Updated sol2 to version 3.3.0 - this adds support for Lua 5.4 and fixes a number of issues, including not correctly handling errors when Lua is built as C++. Updated LuaFileSystem to version 1.8.0 - this adds support for symbolic links on Windows, as well as Lua 5.4 compatibility. Updated LuaSQLite3 to version 0.9.5 - this fixes issues in multi-threaded environments, as well as Lua 5.4 compatibility. Fixed double-free after attempting to construct a debugger expression from Lua with an invalid string, and exposed expression error to Lua in a better way. Added warning level print function to Lua. Fixed saving cheats with shift operators in expressions, although this code isn't actually used as there's no cheat editor.
80 lines
2.9 KiB
C
80 lines
2.9 KiB
C
/*
|
|
** $Id: ldo.h $
|
|
** Stack and Call structure of Lua
|
|
** See Copyright Notice in lua.h
|
|
*/
|
|
|
|
#ifndef ldo_h
|
|
#define ldo_h
|
|
|
|
|
|
#include "lobject.h"
|
|
#include "lstate.h"
|
|
#include "lzio.h"
|
|
|
|
|
|
/*
|
|
** Macro to check stack size and grow stack if needed. Parameters
|
|
** 'pre'/'pos' allow the macro to preserve a pointer into the
|
|
** stack across reallocations, doing the work only when needed.
|
|
** It also allows the running of one GC step when the stack is
|
|
** reallocated.
|
|
** 'condmovestack' is used in heavy tests to force a stack reallocation
|
|
** at every check.
|
|
*/
|
|
#define luaD_checkstackaux(L,n,pre,pos) \
|
|
if (l_unlikely(L->stack_last - L->top <= (n))) \
|
|
{ pre; luaD_growstack(L, n, 1); pos; } \
|
|
else { condmovestack(L,pre,pos); }
|
|
|
|
/* In general, 'pre'/'pos' are empty (nothing to save) */
|
|
#define luaD_checkstack(L,n) luaD_checkstackaux(L,n,(void)0,(void)0)
|
|
|
|
|
|
|
|
#define savestack(L,p) ((char *)(p) - (char *)L->stack)
|
|
#define restorestack(L,n) ((StkId)((char *)L->stack + (n)))
|
|
|
|
|
|
/* macro to check stack size, preserving 'p' */
|
|
#define checkstackGCp(L,n,p) \
|
|
luaD_checkstackaux(L, n, \
|
|
ptrdiff_t t__ = savestack(L, p); /* save 'p' */ \
|
|
luaC_checkGC(L), /* stack grow uses memory */ \
|
|
p = restorestack(L, t__)) /* 'pos' part: restore 'p' */
|
|
|
|
|
|
/* macro to check stack size and GC */
|
|
#define checkstackGC(L,fsize) \
|
|
luaD_checkstackaux(L, (fsize), luaC_checkGC(L), (void)0)
|
|
|
|
|
|
/* type of protected functions, to be ran by 'runprotected' */
|
|
typedef void (*Pfunc) (lua_State *L, void *ud);
|
|
|
|
LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
|
|
LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
|
|
const char *mode);
|
|
LUAI_FUNC void luaD_hook (lua_State *L, int event, int line,
|
|
int fTransfer, int nTransfer);
|
|
LUAI_FUNC void luaD_hookcall (lua_State *L, CallInfo *ci);
|
|
LUAI_FUNC int luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int narg1, int delta);
|
|
LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int nResults);
|
|
LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults);
|
|
LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults);
|
|
LUAI_FUNC StkId luaD_tryfuncTM (lua_State *L, StkId func);
|
|
LUAI_FUNC int luaD_closeprotected (lua_State *L, ptrdiff_t level, int status);
|
|
LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u,
|
|
ptrdiff_t oldtop, ptrdiff_t ef);
|
|
LUAI_FUNC void luaD_poscall (lua_State *L, CallInfo *ci, int nres);
|
|
LUAI_FUNC int luaD_reallocstack (lua_State *L, int newsize, int raiseerror);
|
|
LUAI_FUNC int luaD_growstack (lua_State *L, int n, int raiseerror);
|
|
LUAI_FUNC void luaD_shrinkstack (lua_State *L);
|
|
LUAI_FUNC void luaD_inctop (lua_State *L);
|
|
|
|
LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode);
|
|
LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud);
|
|
|
|
#endif
|
|
|