Macro WITH-COMPILATION-UNIT
with-compilation-unit ( [[ option ]] ) form* => result*
option::= :override override
override - generalized-boolean。評価されます。 デフォルトはnil。
form - 暗黙のprogn
result - formの返却値
formを左から右に評価します。 with-compilation-unitの動的環境内では、 コンパイラーがコンパイルの終了まで延期した動作は、 with-compilation-unitの一番外側の呼び出しが 終了するまで延期されます。
optionの集合は実装によって拡張されることが許されますが、 しかしキーワード:overrideのみが標準のものになります。
もし動的にネストされたとき、 最も外側で呼び出されたwith-compilation-unitのみが 関連付けられた:overrideの値がtrueではないときに限り、 何らかの効果を持ちます。 overrideがtrueである場合においては、 最も内側にあるoverrideがtrueのものが終了した時点まで 警告が遅延されます。
関数compile-fileは、 次のような効果を提供します。
(with-compilation-unit (:override nil) ...)コンパイルされるコードが上記のものに囲まれます。
実装依存の拡張は ただ実装依存なキーワードの使用によって プログラマーが明示的に要求した結果としてのみ提供することができます。 実装者はこのマクロの使用方法として、 キーワードを全て削除するか、 あるいはちょうど:overrideのキーワードに対して 追加の意味を割り当てることが許されていません。
もし実装が通常特定の種類の警告、 例えばundefined-functionについての警告を コンパイル単位(例えばファイル単位)の終端まで延期したいとき、 次の例ではどのようにしてこれらの警告を いくつかのファイルにおいてコンパイルの終端まで 遅延させるかについて示します。
(defun compile-files (&rest files)
(with-compilation-unit ()
(mapcar #'(lambda (file) (compile-file file)) files)))
(compile-files "A" "B" "C")しかし、もし実装がどのような警告についても 通常みられるような遅延をしないときは、 with-compilation-unitは何の効果も持たないことを注意して下さい。
なし。
なし。
なし。