eval-when
(eval-when (situation...) body...)
本体を progn として評価します。すべての状況指定(:compile-toplevel、:load-toplevel、:execute、および非推奨の compile/load/eval 表記)は「今評価する」として扱われます。状況リストは必須ですがそれ以外は無視されるため、本物の Common Lisp の状況規則の下で動くコードはここでも動きます。
トップレベルではコンパイルパス上で本体のフォームが周囲のプログラムにスプライスされるため、よくあるマクロエクスポートのイディオム -- (eval-when (:compile-toplevel :load-toplevel :execute) ...) に包まれた defmacro -- はコンパイル単位の残りの部分に対してマクロを定義し、ネストした defun も通常のトップレベル定義と同様に収集されます。