Next: , Previous: The Outside Context, Up: Edebug


17.2.15 マクロ呼び出しの処置

edebugがLispマクロを呼び出す式を処置するとき、 それを正しく行うにはマクロに関する余分な情報を必要とします。 マクロ呼び出しのどの部分式が評価されるフォームであるかを 明確に判定する方法がないからです。 (マクロ本体で明示的に評価されるか、 結果の展開形が評価されるときか、あるいは、さらにあと)

したがって、edebugが出会う各マクロについて、 当該マクロの呼び出し形式を記述するedebug用仕様を定義する必要があります。 これには、def-edebug-specを使います。

— マクロ: def-edebug-spec macro specification

マクロmacroの呼び出しのどの式が評価されるかを指定する。 単純なマクロでは、specificationは マクロ定義の仮引数リストに似ているが、 その指定はマクロ引数よりも汎用性がある。

引数macroはマクロ名だけでなく任意のシンボルでよい。

例題マクロfor(see Argument Evaluation)の edebug用仕様の等価な定義例2つを示します。

     (def-edebug-spec for
       (symbolp "from" form "to" form "do" &rest form))
     
     (def-edebug-spec for
       (symbolp ['from form] ['to form] ['do body]))

specificationに指定するものとその引数の処理方法は次表のとおりです。

t
すべての引数を評価するように処置する。
0
引数はいっさい処置しない。
シンボル
edebug用仕様を持つシンボルをかわりに使う。 この間接参照は別の種類の仕様を得るまで繰り返す。 これにより、別のマクロから仕様を継承できる。
リスト
リストの各要素は、呼び出しフォームの引数の型を記述する。 仕様リストの各要素については次節で述べる。