LINUX.ORG.RU

Отладка macrolet

 ,


0

3

Пламенный привет!

Подскажите пожалуйста, есть ли в слайме способ удобной отладки macrolet-макросов? Нужно посмотреть, во что он раскрывается, но slime-expand-1 возвращает саму форму вызова макроса. Пробовал компилировать функцию, содержащую macrolet, не помогло, все равно слаймом не раскрывается.

Вынести macrolet-макрос во внешний не вариант, он генерируется внутри функции и завязан на внутренние аргументы.

Минимальный пример:

(defmacro def-something (name (&rest args) &rest body)
 `(defun ,name ,args
   (macrolet ((-macro- () 42))
    ,@body)))

(def-something foo ()
 (-macro-)
 (values))

Хочу раскрыть -macro- внутри foo.

★★★★★

завязан на внутренние аргументы

Ну так протащи эти аргументы явным образом в именованный макрос, отладь, а потом выкинешь и перенесешь в макролет.

anonymous ()

Лучше всего - делать отдельный функцию, которая вызывается макросом. Можно также попробовать вызвать sb-cltl2:macroexpand-all (так как обычный macroexpand и macroexpand-1 раскрывает только форму верхнего уровня).

dmitry_vk ★★★ ()
Ответ на: комментарий от anonymous

Ну так протащи эти аргументы явным образом в именованный макрос, отладь, а потом выкинешь и перенесешь в макролет.

Как неудобный вариант сгодится, если в лисповом образе нет expand-all, который кое-как тоже решает проблему. В общем исхитриться всегда можно, вопрос в том, как работать с этим удобно.

staseg ★★★★★ ()

См. также cliki://macroexpand-dammit

anonymous ()

поднимем хорошую тему

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.