--- rpl/src/instructions_f1.c 2010/04/07 07:16:12 1.6 +++ rpl/src/instructions_f1.c 2011/04/14 08:46:42 1.20.2.2 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.13 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.23 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -271,6 +271,7 @@ instruction_fleche(struct_processus *s_e } else { + (*s_etat_processus).expression_courante = l_element_courant; (*s_etat_processus).erreur_execution = d_ex_nom_invalide; return; } @@ -285,6 +286,7 @@ instruction_fleche(struct_processus *s_e } else if ((*(*l_element_courant).donnee).type != NOM) { + (*s_etat_processus).expression_courante = l_element_courant; (*s_etat_processus).erreur_execution = d_ex_nom_invalide; return; } @@ -293,6 +295,7 @@ instruction_fleche(struct_processus *s_e if ((s_objet_elementaire = copie_objet(s_etat_processus, (*l_element_courant).donnee, 'P')) == NULL) { + (*s_etat_processus).expression_courante = l_element_courant; (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -301,6 +304,7 @@ instruction_fleche(struct_processus *s_e if (empilement(s_etat_processus, &((*s_etat_processus) .l_base_pile), s_objet_elementaire) == d_erreur) { + (*s_etat_processus).expression_courante = l_element_courant; return; } @@ -312,6 +316,8 @@ instruction_fleche(struct_processus *s_e l_element_courant = (*l_element_courant).suivant; } while((fin_scrutation == d_faux) && (l_element_courant != NULL)); + (*s_etat_processus).objet_courant = + (*(*s_etat_processus).expression_courante).donnee; (*s_etat_processus).instruction_courante = tampon; if (fin_scrutation == d_faux) @@ -351,6 +357,12 @@ instruction_fleche(struct_processus *s_e for(i = 0; i < nombre_variables; i++) { + if (l_emplacement_valeurs == NULL) + { + (*s_etat_processus).erreur_execution = d_ex_manque_argument; + return; + } + l_emplacement_valeurs = (*l_emplacement_valeurs).suivant; } @@ -586,6 +598,13 @@ instruction_fleche(struct_processus *s_e if ((s_variable_partagee.nom = malloc((strlen(s_variable.nom) + 1) * sizeof(unsigned char))) == NULL) { + if (pthread_mutex_unlock(&((*(*s_etat_processus) + .s_liste_variables_partagees).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -632,6 +651,13 @@ instruction_fleche(struct_processus *s_e if (creation_variable_partagee(s_etat_processus, &s_variable_partagee) == d_erreur) { + if (pthread_mutex_unlock(&((*(*s_etat_processus) + .s_liste_variables_partagees).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + return; }