FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Gestion des labels pour ON_ERROR_GOTO Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Gestion des labels pour ON_ERROR_GOTO Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Gestion des labels pour ON_ERROR_GOTO Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Gestion des labels pour ON_ERROR_GOTO Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Gestion des labels pour ON_ERROR_GOTO Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Gestion des labels pour ON_ERROR_GOTO Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Gestion des labels pour ON_ERROR_GOTO Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Gestion des labels pour ON_ERROR_GOTO Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Gestion des labels pour ON_ERROR_GOTO Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Gestion des labels pour ON_ERROR_GOTO Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Gestion des labels pour ON_ERROR_GOTO Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Gestion des labels pour ON_ERROR_GOTO Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Gestion des labels pour ON_ERROR_GOTO Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Gestion des labels pour ON_ERROR_GOTO Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Gestion des labels pour ON_ERROR_GOTO Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -25%
PC Portable Gamer 16,1” HP Victus 16 – 16 ...
Voir le deal
749.99 €

 

 Gestion des labels pour ON_ERROR_GOTO

Aller en bas 
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Gestion des labels pour ON_ERROR_GOTO Empty
MessageSujet: Gestion des labels pour ON_ERROR_GOTO   Gestion des labels pour ON_ERROR_GOTO EmptyMar 14 Mai 2013 - 21:23

Lorsqu'on utilise des procédures, on ne peut pas savoir si un ON_ERROR_GOTO est en vigueur, et si oui, vers quel label. Or, on peut être conduit à gérer des erreurs dans une procédure, sans perturber la gestion des erreurs du module principal, et ceci devient encore plus complexe qi une procédure en appelle une autre, etc.

C'est pourquoi je propose 3 solutions à ce problème.

1ère proposition:

Elle est de loin la plus élégante et la plus performante. Je propose une nouvelle commande LABEL_LOCAL sur le modèle de DIM_LOCAL. Tout comme une variable locale, un label local ne serait connu que dans le cadre d'une procédure. Et une gommande ON_ERROR_GOTO_LOCAL n'utiliserait que les labels locaux. On aurait donc:
LABEL_LOCAL N : ' définit un label N localement dans la procédure
ON_ERROR_GOTO_LOCAL N : ' active le label local N comme cible en cas d'erreur
OFF_ERROR_GOTO_LOCAL : ' désactive le ON_ERROR_GOTO_LOCAL

En cas d'erreur, on procède ainsi:
si un ON_ERROR_GOTO_LOCAL est actif, alors on y va
si un ON_ERROR_GOTO est actif, alors on y va
sinon, message d'erreur de Panoramic

Comme une procédure peut en appeler une autre avec à nouveau son propre traitement d'erreur, il faut bien sûr gérer ces labels d'erreur par une pile des labels qui se remplit à l'entrée dans une procédure et qui se vide par EXIT_SUB et END_SUB.

2ème solution:
Je propose la création d'une "pile" de labels pour ON_ERROR_GOTO, cachée à l'intérieur de Panoramic, et manipulable par les nouvelles commandes suivantes:
PUSH_ERROR_GOTO : ' ajouter le label ON_ERROR_GOTO actuel sur la pile
POP_ERROR_GOTO : ' remplacer le label ON_ERROR_GOTO actuel par le haut de la pile
On pourrait ainsi écrire:
Code:

label erreur_programme_principal
on_error_goto erreur_programme_principal
...
traitement()
...
erreur_programme_principal:
' ici, on ne traite que les erreurs du programme principal
...

end

sub traitement()
if label("erreur_traitement")=0 then label erreur_traitement
push_error_goto
on_error_goto erreur_traitement
...
pop_error_goto
exit_sub
erreur_traitement:
' ici, on ne traite que les erreurs de la procédure traitement()
...
pop_error_goto
end_sub

3ème proposition:
cette proposition vise à utiliser une DLIST tout à fait banale pour mémoriser les labels des ON_ERROR_GOTO et de gérer ainsi soi-même cette fameuse pile. Pour cela, i faut une nouvelle variable système et une nouvelle commande:
nom$ = GET_ERROR_GOTO$ : ' cette variable système contient le nom du label ON_ERROR_GOTO actuel
SET_ERROR_GOTO nom$ : ' comme ON_ERROR_GOTO, mais avec le label dans une variable string.
L'exemple ci-dessus deviendrait alors:
Code:

label erreur_programme_principal
dim pile% : pile% = 17
dlist pile%
on_error_goto erreur_programme_principal
...
traitement()
...
erreur_programme_principal:
' ici, on ne traite que les erreurs du programme principal
...

end

sub traitement()
if label("erreur_traitement")=0 then label erreur_traitement
item_add pile%,get_error_goto$
on_error_goto erreur_traitement
...
set_error_goto item_read$(pile%,count(pile%))
item_delete pile%,count(pile%)
exit_sub
erreur_traitement:
' ici, on ne traite que les erreurs de la procédure traitement()
...
set_error_goto item_read$(pile%,count(pile%))
item_delete pile%,count(pile%)
end_sub

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Gestion des labels pour ON_ERROR_GOTO
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Base pour un programme de gestion
» Labels et sous-programmes dans une variable ?
» Subroutine, Function ainsi que labels et variables locales
» Aide-mémoire des mots-clés Panoramic
» Aide pour la création d'un wrapper pour le langage Linotte.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos souhaits d'amélioration de Panoramic-
Sauter vers: