Macro com defcustom leva ao erro "O valor do símbolo como variável inválida" quando compilado por bytes

13

Em dois dos meus pacotes, tenho uma macro em que o corpo depende de uma variável definida em um defcustomformulário.

Ao instalar os pacotes do Melpa, a compilação de bytes termina com:

Erro: o valor do símbolo como variável é nulo: my-defcustom-variable

Em seguida, compilar manualmente o arquivo, abrindo-o em um buffer, funciona.

Eu tentei com um autoloadcookie, mas ainda tenho o mesmo comportamento.

Estou sentindo falta de algo importante aqui.

syl20bnr
fonte
1
Dependendo do defcustomcorpo de uma macro, é uma coisa estranha a se fazer, pois defcustomela só entrará em vigor durante a compilação de bytes (onde a macro é expandida). Isso não parece fazer muito sentido para mim.
lunaryorn
Obrigado Sebastian, você está certo e isso explica muitas coisas.
precisa

Respostas:

15

A defcustomexpressão não é avaliada durante a compilação de bytes, portanto, quando sua macro é expandida, a variável ainda não existe porque esse defcustom foi compilado, mas não executado. Você pode mover o defcustom para outro arquivo (que você então requireinicia no início do arquivo) ou pode agrupar o defcustom dentro eval-and-compile.

Stefan
fonte