-local setfield = (Dnode == node.direct) and Dnode.setfield or function(n, i, c) n[i] = c end
-local getfield = (Dnode == node.direct) and Dnode.getfield or function(n, i) return n[i] end
-local getid = (Dnode == node.direct) and Dnode.getid or function(n) return n.id end
-local getlist = (Dnode == node.direct) and Dnode.getlist or function(n) return n.head end
-local getchar = (Dnode == node.direct) and Dnode.getlist or function(n) return n.char end
+local setfield = (Dnode ~= node) and Dnode.setfield or function(n, i, c) n[i] = c end
+local getfield = (Dnode ~= node) and Dnode.getfield or function(n, i) return n[i] end
+local getid = (Dnode ~= node) and Dnode.getid or function(n) return n.id end
+local getlist = (Dnode ~= node) and Dnode.getlist or function(n) return n.head end
+local getchar = (Dnode ~= node) and Dnode.getchar or function(n) return n.char end