--- rpl/src/gestion_pile_systeme.c 2013/03/06 13:20:49 1.54 +++ rpl/src/gestion_pile_systeme.c 2023/12/22 10:10:54 1.91 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.35 + Copyright (C) 1989-2023 Dr. BERTRAND Joël This file is part of RPL/2. @@ -39,9 +39,10 @@ static inline void estimation_taille_pile_systeme(struct_processus *s_etat_processus) { (*s_etat_processus).estimation_taille_pile_systeme_tampon = - ((*s_etat_processus).estimation_taille_pile_systeme_tampon * - ((double) 0.9)) + ((*s_etat_processus) - .hauteur_pile_systeme * ((double) 0.1)); + (((double) (*s_etat_processus) + .estimation_taille_pile_systeme_tampon) * + ((double) 0.9)) + (((double) (*s_etat_processus) + .hauteur_pile_systeme) * ((double) 0.1)); return; } @@ -148,10 +149,13 @@ empilement_pile_systeme(struct_processus = (*s_etat_processus).creation_variables_partagees; (*(*s_etat_processus).l_base_pile_systeme).evaluation_expression = d_faux; + (*(*s_etat_processus).l_base_pile_systeme).debug_programme = + (*s_etat_processus).debug_programme; (*s_etat_processus).erreur_systeme = d_es; (*s_etat_processus).creation_variables_statiques = d_faux; (*s_etat_processus).creation_variables_partagees = d_faux; + (*s_etat_processus).debug_programme = d_faux; return; } @@ -222,6 +226,8 @@ depilement_pile_systeme(struct_processus (*s_etat_processus).l_base_pile_systeme = l_nouvelle_base_liste; (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).debug_programme = (*l_ancienne_base_liste) + .debug_programme; // On positionne le drapeau de création des variables statiques. @@ -302,13 +308,12 @@ effacement_pile_systeme(struct_processus void trace(struct_processus *s_etat_processus, FILE *flux) { - int candidat; - int j; - int nb_variables; - integer8 i; + integer8 j; + integer8 candidat; integer8 candidat8; integer8 delta; + integer8 nb_variables; struct_liste_chainee *l_element_expression; @@ -332,8 +337,8 @@ trace(struct_processus *s_etat_processus nb_variables = nombre_variables(s_etat_processus); - if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables))) - == NULL) + if ((tableau = malloc(((size_t) nb_variables) * + sizeof(struct_tableau_variables))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -492,11 +497,10 @@ trace(struct_processus *s_etat_processus } } - fprintf(flux, " Level = %d\n", - (*l_element_courant).niveau_courant); + fprintf(flux, " Level = %lld\n", + (long long int) (*l_element_courant).niveau_courant); - if (((*l_element_courant).retour_definition == 'Y') || - ((*l_element_courant).origine_routine_evaluation == 'Y')) + if ((*l_element_courant).retour_definition == 'Y') { fprintf(flux, " Return = yes\n"); @@ -514,27 +518,33 @@ trace(struct_processus *s_etat_processus for(j = 0; j < nb_variables; j++) { - if (((*(tableau[j].objet)).type == RPN) || - ((*(tableau[j].objet)).type == ALG)) + if (tableau[j].objet != NULL) { - l_element_expression = (*(tableau[j].objet)).objet; - - while(l_element_expression != NULL) + // Variable ni partagée ni statique + if (((*(tableau[j].objet)).type == RPN) || + ((*(tableau[j].objet)).type == ALG)) { - if (l_element_expression == (*l_element_courant) - .pointeur_objet_retour) + l_element_expression = + (*(tableau[j].objet)).objet; + + while(l_element_expression != NULL) { - candidat = j; - break; - } + if (l_element_expression == + (*l_element_courant) + .pointeur_objet_retour) + { + candidat = j; + break; + } - l_element_expression = - (*l_element_expression).suivant; - } + l_element_expression = + (*l_element_expression).suivant; + } - if (candidat != -1) - { - break; + if (candidat != -1) + { + break; + } } } } @@ -596,7 +606,7 @@ trace(struct_processus *s_etat_processus if ((*(tableau[j].objet)).type == ADR) { delta = (*l_element_courant).adresse_retour - - (*((unsigned long *) + - (*((integer8 *) (*(tableau[j].objet)).objet)); if ((delta >= 0) && (delta < candidat8)) @@ -618,12 +628,16 @@ trace(struct_processus *s_etat_processus "unknown definition\n"); } } - else + else if ((*l_element_courant).niveau_courant == 0) { fprintf(flux, "\n"); fprintf(flux, " = RPL/2 " "initialization\n"); } + else + { + fprintf(flux, "\n"); + } } } else @@ -631,7 +645,8 @@ trace(struct_processus *s_etat_processus fprintf(flux, " Return = no\n"); } - if ((*l_element_courant).indice_boucle != NULL) + if (((*l_element_courant).indice_boucle != NULL) && + ((*l_element_courant).type_cloture != 'A')) { tampon = formateur(s_etat_processus, 24, (*l_element_courant).indice_boucle); @@ -666,7 +681,6 @@ trace(struct_processus *s_etat_processus l_element_courant = (*l_element_courant).suivant; } - fprintf(flux, "\n"); funlockfile(flux); free(tableau);