--- rpl/src/bibliotheques_externes.c 2017/07/12 15:43:06 1.73 +++ rpl/src/bibliotheques_externes.c 2019/02/03 14:40:28 1.81 @@ -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.31 + Copyright (C) 1989-2019 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) /