On Mon, 10 Apr 2023 at 23:31, Josef Friedrich
The documentation and the implementation of the two functions lua.setluaname and lua.getluaname do not match.
Minimal working example (MWE):
% lua.setluaname(42, '@filename') not working \directlua{ lua.setluaname(nil, 42, '@filename') } \directlua 42 {xxx} \bye
This is how the parameters should be arranged in the set function:
lua.setluaname(<number> n, <string> s) <string> s = lua.getluaname(<number> n)
# Patch:
diff --git a/manual/luatex-tex.tex b/manual/luatex-tex.tex index f8c3d5ac6..e953a1802 100644 --- a/manual/luatex-tex.tex +++ b/manual/luatex-tex.tex @@ -96,7 +96,7 @@ If you want to unset a \LUA\ name, you can assign \type {nil} to it. The functio accessors are:
\startfunctioncall -lua.setluaname(<string> s,<number> n]) +lua.setluaname(<number> n, <string> s) <string> s = lua.getluaname(<number> n) \stopfunctioncall
@@ -2747,7 +2747,6 @@ The options match commandline arguments from \type {kpsewhich}: If \type {--output-directory} is specified and the value is a relative pathname, the file is searched first here and then in the standard tree.
- \stopsubsection
\startsubsection[title={\type {init_prog}}] diff --git a/source/texk/web2c/luatexdir/lua/llualib.c b/source/texk/web2c/luatexdir/lua/llualib.c index 0586aba02..d91a9a729 100644 --- a/source/texk/web2c/luatexdir/lua/llualib.c +++ b/source/texk/web2c/luatexdir/lua/llualib.c @@ -319,8 +319,8 @@ static int set_luaname(lua_State * L) { int k; const char *s; - if (lua_gettop(L) == 3) { - k = (int) luaL_checkinteger(L, 2); + if (lua_gettop(L) == 2) { + k = (int) luaL_checkinteger(L, 1); if (k > 65535 || k < 0) { /* error */ } else { @@ -328,8 +328,8 @@ static int set_luaname(lua_State * L) free(luanames[k]); luanames[k] = NULL; } - if (lua_type(L,3) == LUA_TSTRING) { - s = lua_tostring(L, 3); + if (lua_type(L, 2) == LUA_TSTRING) { + s = lua_tostring(L, 2); if (s != NULL) luanames[k] = xstrdup(s); } @@ -340,7 +340,7 @@ static int set_luaname(lua_State * L)
static int get_luaname(lua_State * L) { - int k = (int) luaL_checkinteger(L, 2); + int k = (int) luaL_checkinteger(L, 1); if (k > 65535 || k < 0) { /* error */ lua_pushnil(L);
Pushed f4a891108 lua.setluaname(n, s) and lua.getluaname(n): fixed mismatch between documentation and implementation (J. Friedrich). -- luigi