Mécanisme

Une condition est un objet Common Lisp normal. Son type indique la gravité de la situation exceptionnelle (warning, error) ainsi que la nature plus précise de la situation (e.g. division-by-zero). Cet objet peut contenir des créneaux pour indiquer des informations supplémentaires à transmettre depuis fonction qui détecte la situation vers celle qui la traite.

Une fonction d'un niveau supérieur souhaitant être informée d'une situation exceptionnelle établit un traitant (en Anglais : handler). Un traitant est une fonction qui sera appelée avec un seul argument : une condition.

Une fonction ayant détecté une situation exceptionnelle signale une condition. La façon la plus primitive de signaler une condition est d'utiliser la fonction signal. D'autres fonctions comme warning et error signalent des conditions d'une gravité particulière.

Il est important de réaliser la différence entre le mécanisme de conditions Common Lisp et le mécanisme d'exceptions d'autres langages de programmation. Dans certains autres langages de programmation, le fait d'envoyer une exception dépile automatiquement la pile d'exécution jusqu'à ce que le traitant soit trouvé. En Common Lisp, en revanche, le traitant est simplement appelé comme n'importe quelle autre fonction. Afin de dépiler la pile d'exécution, le traitant doit effectuer un saut non local (voir chapitre 17).

Du fait que, en Common Lisp, le traitant est simplement appelé, ce dernier a plusieurs options :

Irene DURAND
2011-10-14