LUAI_MAXSTACK defined privately
LUAI_MAXSTACK is limited to INT_MAX/2, so can use INT_MAX/2 to define pseudo-indices (LUA_REGISTRYINDEX) in 'lua.h'. A change in the maximum stack size does not need to change the Lua-C ABI.
This commit is contained in:
14
ldo.c
14
ldo.c
@@ -174,6 +174,20 @@ TStatus luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) {
|
||||
#define STACKERRSPACE 200
|
||||
|
||||
|
||||
/*
|
||||
** LUAI_MAXSTACK limits the size of the Lua stack.
|
||||
** It must fit into INT_MAX/2.
|
||||
*/
|
||||
|
||||
#if !defined(LUAI_MAXSTACK)
|
||||
#if 1000000 < (INT_MAX / 2)
|
||||
#define LUAI_MAXSTACK 1000000
|
||||
#else
|
||||
#define LUAI_MAXSTACK (INT_MAX / 2u)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/* maximum stack size that respects size_t */
|
||||
#define MAXSTACK_BYSIZET ((MAX_SIZET / sizeof(StackValue)) - STACKERRSPACE)
|
||||
|
||||
|
||||
1
ltests.h
1
ltests.h
@@ -155,7 +155,6 @@ LUA_API void *debug_realloc (void *ud, void *block,
|
||||
** Reduce maximum stack size to make stack-overflow tests run faster.
|
||||
** (But value is still large enough to overflow smaller integers.)
|
||||
*/
|
||||
#undef LUAI_MAXSTACK
|
||||
#define LUAI_MAXSTACK 68000
|
||||
|
||||
|
||||
|
||||
6
lua.h
6
lua.h
@@ -37,10 +37,10 @@
|
||||
|
||||
/*
|
||||
** Pseudo-indices
|
||||
** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty
|
||||
** space after that to help overflow detection)
|
||||
** (The stack size is limited to INT_MAX/2; we keep some free empty
|
||||
** space after that to help overflow detection.)
|
||||
*/
|
||||
#define LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000)
|
||||
#define LUA_REGISTRYINDEX (-(INT_MAX/2 + 1000))
|
||||
#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
|
||||
|
||||
|
||||
|
||||
14
luaconf.h
14
luaconf.h
@@ -763,20 +763,6 @@
|
||||
** =====================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ LUAI_MAXSTACK limits the size of the Lua stack.
|
||||
** CHANGE it if you need a different limit. This limit is arbitrary;
|
||||
** its only purpose is to stop Lua from consuming unlimited stack
|
||||
** space and to reserve some numbers for pseudo-indices.
|
||||
** (It must fit into max(int)/2.)
|
||||
*/
|
||||
#if 1000000 < (INT_MAX / 2)
|
||||
#define LUAI_MAXSTACK 1000000
|
||||
#else
|
||||
#define LUAI_MAXSTACK (INT_MAX / 2u)
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
@@ LUA_EXTRASPACE defines the size of a raw memory area associated with
|
||||
** a Lua state with very fast access.
|
||||
|
||||
Reference in New Issue
Block a user