A closure is some code to execute and a context to run it in. The context contains all symbol definitions used during the execution. The Closure object contains a pointer to some code, a pointer to an argument list, and a pointer to a context. The first two describe a function to run (the parameter list and the function body), and the second is context used to evaluate global references.
The closure object is abstract, extended as FuncClosure and MacClosure, the versions for functions (lambda) and for macros. They differ mainly in the operation of the apply method, which must reflect the behavioral differences between functions and macros.
The first class is DiscRefPtr, which specializes the reference counting pointer for the pointer to the context object used by the closure. This is explained here.
closure.h
[Download]closure.cpp
[Download]