Some compilation options configurable from makefile

Compilation options LUA_COMPAT_GLOBAL, LUA_COMPAT_LOOPVAR, and
LUA_READLINELIB do not affect the API, so they can be changed
through the make file.
This commit is contained in:
Roberto Ierusalimschy
2026-01-20 13:06:16 -03:00
parent f5d1e8639b
commit e992c6a959
5 changed files with 20 additions and 5 deletions

2
llex.c
View File

@@ -188,7 +188,7 @@ void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source,
so they cannot be collected */
ls->envn = luaS_newliteral(L, LUA_ENV); /* get env string */
ls->brkn = luaS_newliteral(L, "break"); /* get "break" string */
#if defined(LUA_COMPAT_GLOBAL)
#if LUA_COMPAT_GLOBAL
/* compatibility mode: "global" is not a reserved word */
ls->glbn = luaS_newliteral(L, "global"); /* get "global" string */
ls->glbn->extra = 0; /* mark it as not reserved */

View File

@@ -1685,7 +1685,7 @@ static void forbody (LexState *ls, int base, int line, int nvars, int isgen) {
/*
** Control whether for-loop control variables are read-only
*/
#if defined(LUA_COMPAT_LOOPVAR)
#if LUA_COMPAT_LOOPVAR
#define LOOPVARKIND VDKREG
#else /* by default, these variables are read only */
#define LOOPVARKIND RDKCONST
@@ -2120,7 +2120,7 @@ static void statement (LexState *ls) {
gotostat(ls, line);
break;
}
#if defined(LUA_COMPAT_GLOBAL)
#if LUA_COMPAT_GLOBAL
case TK_NAME: {
/* compatibility code to parse global keyword when "global"
is not reserved */

View File

@@ -14,6 +14,7 @@
/* test Lua with compatibility code */
#define LUA_COMPAT_MATHLIB
#undef LUA_COMPAT_GLOBAL
#define LUA_COMPAT_GLOBAL 0
#define LUA_DEBUG

View File

@@ -70,15 +70,19 @@
#if defined(LUA_USE_LINUX)
#define LUA_USE_POSIX
#define LUA_USE_DLOPEN /* needs an extra library: -ldl */
#if !defined(LUA_READLINELIB)
#define LUA_READLINELIB "libreadline.so"
#endif
#endif
#if defined(LUA_USE_MACOSX)
#define LUA_USE_POSIX
#define LUA_USE_DLOPEN /* macOS does not need -ldl */
#if !defined(LUA_READLINELIB)
#define LUA_READLINELIB "libedit.dylib"
#endif
#endif
#if defined(LUA_USE_IOS)
@@ -339,14 +343,18 @@
/*
@@ LUA_COMPAT_GLOBAL avoids 'global' being a reserved word
*/
#define LUA_COMPAT_GLOBAL
#if !defined(LUA_COMPAT_GLOBAL)
#define LUA_COMPAT_GLOBAL 1
#endif
/*
@@ LUA_COMPAT_LOOPVAR makes for-loop control variables not read-only,
** as they were in previous versions.
*/
/* #define LUA_COMPAT_LOOPVAR */
#if !defined(LUA_COMPAT_LOOPVAR)
#define LUA_COMPAT_LOOPVAR 0
#endif
/*

View File

@@ -9594,12 +9594,18 @@ change between versions.
@item{
The word @Rw{global} is a reserved word.
Do not use it as a regular name.
The compilation option @id{LUA_COMPAT_GLOBAL} (see @id{luaconf.h})
makes @id{global} a regular word.
}
@item{
The control variable in @Rw{for} loops is read only.
If you need to change it,
declare a local variable with the same name in the loop body.
The compilation option @id{LUA_COMPAT_LOOPVAR} (see @id{luaconf.h})
makes these variables regular (writable).
}
@item{