Next: Function call, Previous: Code Data-Blocks, Up: Object Format [Contents]
A closure data-block has the following format:
---------------------------------------------------------------- | Word size (24 bits) | Closure-Type (8 bits) | ---------------------------------------------------------------- | Pointer to function header (other-pointer low-tag) | ---------------------------------------------------------------- | . | | Environment information | | . | ----------------------------------------------------------------
A closure descriptor has function low-tag bits. This means that a descriptor with function low-tag bits may point to either a function header or to a closure. The idea is that any callable Lisp object has function low-tag bits. Insofar as call is concerned, we make the format of closures and non-closure functions compatible. This is the reason for the self-pointer in a function header. Whenever you have a callable object, you just jump through the second word, offset some bytes, and go.