Lisp_Subr.doc could be a Lisp string or an
integer, or perhaps nil, meaning we have to read in the doc file.
A kludge to avoid GC may be suggested. `doc' is declared as
Lisp_Object, but never traversed during GC. When INTP(doc),
XUINT(doc) is offset in `DOC' file. When (XTYPE(doc) ==
Lisp_Type_Record), (char*)XPNTRVAL(doc) points to actual (malloced)
string. We still reuse a way to store pointer and integer
distinguishably, and get adjustment to new architecture automatically
once we have adjusted Lisp_Object representation to it.
For example, XEmacs assumes the lowest two bits
of every pointer are always zero.
This is also the case for pointers returned by `malloc', which are
currently used as values for doc strings.