From: Yukihiro Matsumoto Date: 2005-04-28T00:57:29+09:00 Subject: Re: node.h and nd_line Hi, In message "Re: node.h and nd_line" on Thu, 28 Apr 2005 00:52:19 +0900, "B. K. Oxley (binkley)" writes: |#define nd_line(n) ((unsigned int) (((RNODE(n))->flags >> NODE_LSHIFT) & |NODE_LMASK)) |#define nd_set_line(n,l) \ |RNODE(n)->flags=((RNODE(n)->flags & ~(-1 << NODE_LSHIFT)) | (((l) & |NODE_LMASK) << NODE_LSHIFT)) | |What is going on? :) Line numbers are packed in the flags bits. It's a trick to save memory. Since all nodes and objects shares same heap slot, adding an extra field cost 4 bytes (or 8 bytes on 64bit machines) for every object. matz.