Gestion des erreurs d'exécution
Le système ATARI Pascal prend en charge deux types de vérification d'exécution : intervalle et exception.
La vérification des intervalles est effectuée sur les index du tableau et sur les affectations de sous-intervalle. La condition par défaut du système est que ces vérifications sont désactivées. Vous pouvez les activer dans n'importe quelle section de codage souhaitée à l'aide des directives $R et $X. Ces sections décrivent l'implémentation de ce mécanisme et comment vous pouvez tirer parti de ce mécanisme pour gérer les erreurs d'exécution de manière non standard.
La philosophie générale est que les contrôles d'erreur et les routines d'erreur définiront des indicateurs booléens. Ces indicateurs booléens ainsi qu'un code d'erreur seront chargés sur la pile et la routine intégrée @ERR est appelée avec ces deux paramètres. La routine @ERR testera alors le paramètre booléen. Si c'est faux, aucune erreur ne s'est produite et la routine @ERR reviendra au code compilé et l'exécution continuera. Si c'est vrai, la routine @ERR affichera un message d'erreur et vous permettra de continuer ou d'abandonner.
Vous trouverez ci-dessous les numéros d'erreur transmis à la routine @ERR :
Valeur | Description |
---|---|
1 | Vérification de division par 0 |
2 | Vérification du débordement de mémoire de tas. |
3 | Vérification du débordement de chaîne de caractères. |
4 | Vérification d'intervalle et de portée. |
Vérification de la portée
Lorsque la vérification de l'intervalle est activée, le compilateur génère des appels à @CHK pour chaque index de tableau et affectation de sous-intervalle. La routine @CHK laisse une valeur booléenne sur la pile et le compilateur génère des appels à @ERR après l'appel @CHK. Si la vérification de l'intervalle est désactivée et qu'un index se situe en dehors de l'intervalle valide, des résultats imprévisibles se produiront. Pour les affectations de sous-intervalle, la valeur sera tronquée au niveau de l'octet.
Vérification des exceptions
Lorsque la vérification des exceptions est activée, le compilateur chargera les indicateurs d'erreur (division par zéro, dépassement de chaîne de caractères) selon les besoins et appellera la routine @ERR après chaque opération permettant de définir les indicateurs. Si la vérification des exceptions est désactivée, les routines d'exécution tentent de fournir une action conviviale si possible : la division par zéro entraîne le retour d'une valeur maximale, le débordement de tas ne fait rien et le débordement de chaîne de caractères est tronqué.
Gestionnaires fournis par l'utilisateur
Vous pouvez écrire votre propre routine @ERR à utiliser à la place de la routine système. Vous devez déclarer la routine comme :
- PROCEDURE @ERR(ERR:BOOLEAN; ERRNUM:INTEGER);
La routine sera appelée, comme mentionné ci-dessus, chaque fois qu'une vérification d'erreur est nécessaire et cette routine devra vérifier la variable ERROR et se terminer si elle est FALSE. Vous pouvez décider de l'action appropriée si la valeur est vraie.
Erreurs fatales
Le message «Fatal Errors» peut être déchiffré à des fins de débogage mais peut prêter à confusion. L'erreur peut être traduite en message d'erreur Pascal et en message d'erreur standard ATARI. L'exemple suivant illustrera le processus de traduction :
Fatal Error 64. 88 --> Pascal Error . ATARI Error |
En base 16 (non standard, 6416 -- 10010 et 8816 -- 13610).
Une erreur Pascal 100 pour notre système fait référence à une erreur du système d'exploitation. Dans cet exemple, nous examinerions ensuite le message ATARI Error 136 pour voir que notre erreur concerne un «EOF».
Les erreurs fatales Pascal prédéfinies sont les suivantes :
Code | Message | Description |
---|---|---|
64 | Error while chaining | Erreur lors du chaînage |
65 | Bad pseudo code. | Mauvais pseudo-code. |
66 | Bad pseudo code. | Mauvais pseudo-code. |
67 | Undefined pseudo opcode. | Pseudo-opcode non défini. |
68 | Stack overflow (program too complex). | Débordement de pile (programme trop complexe). |