[luatex] The node returned by node.traverse().

luigi scarso luigi.scarso at gmail.com
Wed Feb 15 14:32:13 CET 2012


On Wed, Feb 15, 2012 at 9:02 AM, Paul Isambert <zappathustra at free.fr> wrote:
> Hello there,
>
> I have a problem with the identity, so to speak, of nodes returned by
> node.traverse(); I don't know if I'm missing something (perhaps related
> to Lua rather than LuaTeX) or what. The following code should illustrate
> the problem (I do not bother with breaks since there is only one node in
> the list and one entry in the table):
>
> %%%%%%%%%%%
> \setbox0=\hbox{a}
>
> \directlua{
>  local head = tex.box[0].head
>  local t = { [head] = true }
>  for n in node.traverse(head) do
>    texio.write_nl(tostring(t[n]))
>    texio.write_nl(tostring(n == head))
>    for a in pairs(t) do
>      if a == n then
>        texio.write_nl("They match!")
>      end
>    end
>  end
> }
The key of t is head,  and head is a userdata.

 n==head is managed by __eq(n,head)  handler so can happen that
__eq(n,head) is true based on some considerations of n and head.

On the other side rawequal(n,head) gives false
so n and head have not the same identity (can be a different address,
but we don't have a
way to print addresses in Lua).
With
local head_copy = head
rawequal(head_copy,head)
gives true , i.e head_copy and head have the same identity.
(and of course head_copy == head  is true )

As far I know, keys are based on  identities, so t[n] and t[head] differs.

-- 
luigi



More information about the luatex mailing list