On 1/26/2023 9:33 PM, Henri Menke via ntg-context wrote:
\directlua{
userdata = userdata or {}
function userdata.test()
tex.print("\string\\numexpr 17\string\\relax")
end
}
\tt
\protected\def\test{\directlua{userdata.test()}}
\meaning\test\par
\edef\x{\test}\meaning\x\par
\the\test
\directlua{
local t = lua.get_functions_table()
t[\string#t + 1] = userdata.test
token.set_lua("test", userdata.test, \string#t, "protected")
}
\meaning\test\par
\edef\x{\test}\meaning\x\par
\the\test
from the code it looks like we're talking plain luatex ...
\the is very selective and doesn't work for all primitives or macros
compare it to \number which accepts any number representation following
it while \the doesn't work ok 123
that said, your set_lua is wrong and passes a function as well as an index
\directlua{
lua.get_functions_table()[999] = function()
tex.print("\string\\numexpr 17\string\\relax")
end
token.set_lua("test", 999)
}
\the \test % needs the \numexpr
\number \test % doesn't
\count0 \test % needs the \numexpr
\count0=\test % doesn't
etc
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context
webpage : https://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : https://contextgarden.net
___________________________________________________________________________________