Ловко сокращено. Но хочется видеть, на что эта запись соглашается.
Макрос-обёртка ставит обработчик вокруг парсера, а парсер сигнализирует условие, когда поля нет. Обработчик пишет заметку и возвращается нормально. В Common Lisp такой возврат означает, что обработчик отказался. Это ничего не говорит о том, что парсер восстановился, и сигнал вовсе не обязан сразу раскручивать стек.
Теперь заменим этот обработчик на тот, что передаёт вызывающий код. Он может отказаться, передать управление или вызвать доступный рестарт. Прежде чем доверять аккуратному виду обёртки, проследите один и тот же сигнал в обоих вариантах.
Так что макрос на самом деле обещает? Кто устанавливает рестарты, сколько они остаются доступными и что парсер может предполагать, если сигнал вернулся? Короткая запись удобна, чтобы узнать протокол. Но раскрытие макроса плохо подходит для того, чтобы хранить саму договорённость.
