--- rpl/src/analyse_notation_rpn.c 2011/04/21 16:00:53 1.21 +++ rpl/src/analyse_notation_rpn.c 2021/03/13 12:50:37 1.73 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.0.prerelease.0 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.33 + Copyright (C) 1989-2021 Dr. BERTRAND Joël This file is part of RPL/2. @@ -51,11 +51,11 @@ analyse_rpn(struct_processus *s_etat_pro unsigned char *registre_instruction; unsigned char *registre_programme; - unsigned long element_en_cours; - unsigned long i; - unsigned long j; - unsigned long nombre_termes; - unsigned long registre_compteur_programme; + integer8 element_en_cours; + integer8 i; + integer8 j; + integer8 nombre_termes; + integer8 registre_compteur_programme; registre_autorisation_empilement = (*s_etat_processus) .autorisation_empilement_programme; @@ -75,9 +75,27 @@ analyse_rpn(struct_processus *s_etat_pro { if (recherche_instruction_suivante(s_etat_processus) == d_erreur) { + while((*s_etat_processus).l_base_pile != l_ancienne_base_pile) + { + if (depilement(s_etat_processus, &((*s_etat_processus) + .l_base_pile), &s_objet) == d_erreur) + { + return NULL; + } + + liberation(s_etat_processus, s_objet); + } + + (*s_etat_processus).position_courante = registre_compteur_programme; + (*s_etat_processus).definitions_chainees = registre_programme; + (*s_etat_processus).instruction_courante = registre_instruction; + (*s_etat_processus).autorisation_empilement_programme = + registre_autorisation_empilement; + return NULL; } + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); free((*s_etat_processus).instruction_courante);