--- rpl/src/instructions_f1.c 2012/08/22 10:47:15 1.40 +++ rpl/src/instructions_f1.c 2012/12/13 16:59:41 1.46 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.10 + RPL/2 (R) version 4.1.11 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -457,7 +457,7 @@ instruction_fleche(struct_processus *s_e if (recherche_variable_statique(s_etat_processus, s_variable.nom, position_variable, ((*s_etat_processus).mode_execution_programme == 'Y') - ? 'P' : 'E') == d_vrai) + ? 'P' : 'E') != NULL) { // Variable statique à utiliser @@ -470,12 +470,10 @@ instruction_fleche(struct_processus *s_e s_variable.origine = 'E'; } - s_variable.objet = (*s_etat_processus) - .s_liste_variables_statiques[(*s_etat_processus) - .position_variable_statique_courante].objet; - (*s_etat_processus).s_liste_variables_statiques - [(*s_etat_processus) - .position_variable_statique_courante].objet = NULL; + s_variable.objet = (*(*s_etat_processus) + .pointeur_variable_statique_courante).objet; + (*(*s_etat_processus).pointeur_variable_statique_courante) + .objet = NULL; } else { @@ -551,13 +549,6 @@ instruction_fleche(struct_processus *s_e (*s_etat_processus).objet_courant; } - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (recherche_variable_partagee(s_etat_processus, s_variable.nom, position_variable, ((*s_etat_processus).mode_execution_programme == 'Y') @@ -566,7 +557,7 @@ instruction_fleche(struct_processus *s_e // Variable partagée à utiliser if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -598,7 +589,7 @@ instruction_fleche(struct_processus *s_e + 1) * sizeof(unsigned char))) == NULL) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -651,7 +642,7 @@ instruction_fleche(struct_processus *s_e &s_variable_partagee) == d_erreur) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -661,7 +652,7 @@ instruction_fleche(struct_processus *s_e } if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -735,7 +726,7 @@ instruction_fleche(struct_processus *s_e (*s_etat_processus).niveau_courant--; - if (retrait_variable_par_niveau(s_etat_processus) == d_erreur) + if (retrait_variables_par_niveau(s_etat_processus) == d_erreur) { return; } @@ -984,8 +975,6 @@ instruction_for(struct_processus *s_etat } } - empilement_pile_systeme(s_etat_processus); - if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), &s_objet_1) == d_erreur) { @@ -1026,6 +1015,13 @@ instruction_for(struct_processus *s_etat instruction_valide = (*s_etat_processus).instruction_valide; (*s_etat_processus).test_instruction = 'Y'; + empilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + return; + } + if ((*s_etat_processus).mode_execution_programme == 'Y') { if (recherche_instruction_suivante(s_etat_processus) == d_erreur) @@ -1043,6 +1039,8 @@ instruction_for(struct_processus *s_etat free((*s_etat_processus).instruction_courante); (*s_etat_processus).instruction_courante = tampon; + depilement_pile_systeme(s_etat_processus); + (*s_etat_processus).erreur_execution = d_ex_nom_reserve; return; } @@ -1057,6 +1055,7 @@ instruction_for(struct_processus *s_etat liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); + depilement_pile_systeme(s_etat_processus); return; } @@ -1066,6 +1065,8 @@ instruction_for(struct_processus *s_etat liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); + depilement_pile_systeme(s_etat_processus); + (*s_etat_processus).erreur_execution = d_ex_manque_argument; return; } @@ -1077,6 +1078,7 @@ instruction_for(struct_processus *s_etat { if ((*s_etat_processus).expression_courante == NULL) { + depilement_pile_systeme(s_etat_processus); (*s_etat_processus).erreur_execution = d_ex_manque_argument; return; } @@ -1101,6 +1103,8 @@ instruction_for(struct_processus *s_etat liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); + depilement_pile_systeme(s_etat_processus); + (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle; return; } @@ -1109,6 +1113,8 @@ instruction_for(struct_processus *s_etat liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); + depilement_pile_systeme(s_etat_processus); + (*s_etat_processus).erreur_execution = d_ex_erreur_traitement_boucle; return; }