Une macro avec defcustom entraîne l'erreur «La valeur du symbole car la variable est nulle» lors de la compilation d'octets

13

Dans deux de mes packages, j'ai une macro où le corps dépend d'une variable définie dans un defcustomformulaire.

Lors de l'installation des packages depuis Melpa, la compilation d'octets se termine par:

Erreur: la valeur du symbole en tant que variable est vide: my-defcustom-variable

Ensuite, la compilation d'octets manuellement le fichier en l'ouvrant dans un tampon fonctionne.

J'ai essayé avec un autoloadcookie mais j'ai toujours le même comportement.

Il me manque quelque chose d'important ici.

syl20bnr
la source
1
Dépendre d'un defcustomdans un corps de macro est une chose étrange à faire, car la defcustomvolonté n'entrera en vigueur que lors de la compilation d'octets (où la macro est développée). Cela ne semble pas avoir beaucoup de sens pour moi.
lunaryorn
Merci Sébastien, tu as raison et ça explique beaucoup de choses.
syl20bnr

Réponses:

15

Les defcustomexpressions ne sont pas évaluées lors de la compilation d'octets, donc lorsque votre macro est développée, la variable n'existe pas encore car ce defcustom a été compilé mais pas exécuté. Vous pouvez soit déplacer le defcustom vers un autre fichier (que vous avez ensuite requireau début de votre fichier), ou vous pouvez envelopper le defcustom à l'intérieur eval-and-compile.

Stefan
la source