On Mon, 10 Apr 2023 at 23:31, Josef Friedrich <josef@friedrich.rocks> wrote:
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