--- rpl/src/optimisation.c 2017/06/28 09:20:38 1.73 +++ rpl/src/optimisation.c 2017/07/04 10:28:08 1.74 @@ -36,7 +36,8 @@ */ logical1 -sequenceur_optimise(struct_processus *s_etat_processus) +sequenceur_optimise(struct_processus *s_etat_processus, struct_liste_chainee + *l_bibliotheques) { integer8 adresse_point_entree; integer8 i; @@ -46,6 +47,9 @@ sequenceur_optimise(struct_processus *s_ logical1 erreur; + struct_liste_chainee *l_bibliotheque_courante; + struct_liste_chainee *l_nouvelle_bibliotheque; + struct_objet *programme_principal; struct_tableau_variables *tableau; @@ -395,6 +399,41 @@ sequenceur_optimise(struct_processus *s_ free(tableau); + + // Libération des bibliothèques + + l_bibliotheque_courante = l_bibliotheques; + + while(l_bibliotheque_courante != NULL) + { + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), + (*l_bibliotheque_courante).donnee) == d_erreur) + { + erreur = d_es_allocation_memoire; + + if ((*s_etat_processus).langue == 'F') + { + printf("+++Système : Mémoire insuffisante\n"); + } + else + { + printf("+++System : Not enough memory\n"); + } + + return(d_erreur); + } + + affichage_rplso = d_faux; + instruction_remove(s_etat_processus); + affichage_rplso = d_vrai; + + l_nouvelle_bibliotheque = + (*l_bibliotheque_courante).suivant; + free(l_bibliotheque_courante); + l_bibliotheque_courante = + l_nouvelle_bibliotheque; + } + erreur = evaluation(s_etat_processus, programme_principal, 'E'); if ((*s_etat_processus).profilage == d_vrai)