--- rpl/src/bibliotheques_externes.c 2017/07/12 15:43:06 1.73 +++ rpl/src/bibliotheques_externes.c 2022/09/07 13:40:29 1.86 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.27 - Copyright (C) 1989-2017 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.34 + Copyright (C) 1989-2021 Dr. BERTRAND Joël This file is part of RPL/2. @@ -53,6 +53,7 @@ chargement_bibliotheque(struct_processus struct_liste_chainee *l_element_courant; struct_liste_chainee *l_nouvel_element; + unsigned char *fleche; unsigned char **tableau; unsigned char *tampon; @@ -373,6 +374,19 @@ chargement_bibliotheque(struct_processus for(i = 0; i < nombre_symboles; i++) { + if ((fleche = strstr(tableau[i], "->")) != NULL) + { + memcpy(fleche, "to", 2); + (*s_etat_processus).s_instructions_externes[(*s_etat_processus) + .nombre_instructions_externes].position_fleche = + fleche - tableau[i]; + } + else + { + (*s_etat_processus).s_instructions_externes[(*s_etat_processus) + .nombre_instructions_externes].position_fleche = -1; + } + (*s_etat_processus).s_instructions_externes[(*s_etat_processus) .nombre_instructions_externes].descripteur_bibliotheque = descripteur_bibliotheque; @@ -446,6 +460,10 @@ chargement_bibliotheque(struct_processus [(*s_etat_processus).nombre_instructions_externes - 1] .nom_bibliotheque); + // La nouvelle bibliothèque est mise en tête de la liste pour que + // les bibliothèques soient implicitement déchargées dans l'ordre + // inverse de leur chargement. + (*l_nouvel_element).suivant = (*s_etat_processus).s_bibliotheques; (*s_etat_processus).s_bibliotheques = l_nouvel_element; @@ -861,6 +879,7 @@ execution_fonction_de_bibliotheque(struc struct_rpl_arguments rpl_arguments; + unsigned char *fleche; unsigned char *nom_fonction_externe; unsigned char *tampon; @@ -905,6 +924,11 @@ execution_fonction_de_bibliotheque(struc } } + if ((fleche = strstr(nom_fonction, "->")) != NULL) + { + memcpy(fleche, "to", 2); + } + ordre_iteration = 0; nombre_iterations_maximal = ((integer8) (log((real8) (*s_etat_processus).nombre_instructions_externes) / @@ -1403,6 +1427,8 @@ struct_liste_chainee * empilement_pile_operationnelle(struct_rpl_arguments *s_rpl_arguments, struct_objet *s_objet) { +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" struct_liste_chainee *l_ancienne_base_liste; struct_liste_chainee *l_nouvelle_base_liste; @@ -1423,6 +1449,7 @@ empilement_pile_operationnelle(struct_rp (*s_rpl_arguments).l_base_pile = l_nouvelle_base_liste; return l_nouvelle_base_liste; +# pragma GCC diagnostic pop } @@ -1442,6 +1469,8 @@ struct_liste_chainee * depilement_pile_operationnelle(struct_rpl_arguments *s_rpl_arguments, struct_objet **s_objet) { +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" struct_liste_chainee *l_ancienne_base_liste; struct_liste_chainee *l_nouvelle_base_liste; @@ -1450,7 +1479,7 @@ depilement_pile_operationnelle(struct_rp if ((*s_rpl_arguments).l_base_pile == NULL) { *s_objet = NULL; - return(NULL); + return NULL ; } else { @@ -1463,8 +1492,9 @@ depilement_pile_operationnelle(struct_rp (*s_rpl_arguments).l_base_pile = l_nouvelle_base_liste; - return(l_nouvelle_base_liste); + return l_nouvelle_base_liste ; } +# pragma GCC diagnostic pop }