--- rpl/src/evaluation.c 2010/05/24 10:58:29 1.17 +++ rpl/src/evaluation.c 2012/09/30 20:46:46 1.58 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.16 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.10 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" #define TEST(instruction) (fonction == instruction) #define vers_niveau_inferieur instruction_vers_niveau_inferieur @@ -51,6 +51,7 @@ evaluation(struct_processus *s_etat_proc logical1 drapeau_then; logical1 erreur_evaluation; + logical1 presence_compteur; logical1 presence_egalite; logical1 presence_fonction; logical1 presence_variable; @@ -76,8 +77,6 @@ evaluation(struct_processus *s_etat_proc struct_objet *s_sous_objet; struct_objet *s_copie_variable_partagee; - struct_variable *registre_variables; - unsigned char autorisation_empilement_programme; unsigned char *instruction_courante; unsigned char *message; @@ -97,7 +96,6 @@ evaluation(struct_processus *s_etat_proc unsigned long k; unsigned long l; unsigned long n; - unsigned long m; unsigned long niveau_initial; unsigned long nombre_termes; unsigned long registre_hauteur_pile_operationnelle; @@ -178,8 +176,7 @@ evaluation(struct_processus *s_etat_proc { if ((*s_etat_processus).traitement_symbolique == 'N') { - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] + if ((*(*s_etat_processus).pointeur_variable_courante) .objet == NULL) { // Variable partagée @@ -195,12 +192,10 @@ evaluation(struct_processus *s_etat_proc presence_variable_partagee = d_faux; if (recherche_variable_partagee(s_etat_processus, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).nom, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante) .variable_partagee, 'E') == d_vrai) { presence_variable = d_vrai; @@ -269,9 +264,8 @@ evaluation(struct_processus *s_etat_proc presence_variable = d_vrai; - if ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .objet)).type == ADR) + if ((*(*(*s_etat_processus).pointeur_variable_courante) + .objet).type == ADR) { presence_fonction = d_vrai; } @@ -322,10 +316,8 @@ evaluation(struct_processus *s_etat_proc { (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).objet))); + ((*(*(*s_etat_processus).pointeur_variable_courante) + .objet).objet))); } else { @@ -346,8 +338,7 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] + (*(*s_etat_processus).pointeur_variable_courante) .nom); if ((*s_etat_processus).erreur_systeme != d_es) @@ -399,11 +390,9 @@ evaluation(struct_processus *s_etat_proc registre_evaluation_expression_compilee = (*s_etat_processus).evaluation_expression_compilee; - if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].origine == 'E') && - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].niveau - == 0)) + if (((*(*s_etat_processus).pointeur_variable_courante).origine + == 'E') && ((*(*s_etat_processus) + .pointeur_variable_courante).niveau == 0)) { (*s_etat_processus).evaluation_expression_compilee = 'Y'; } @@ -415,8 +404,7 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] + (*(*s_etat_processus).pointeur_variable_courante) .nom); if ((*s_etat_processus).erreur_systeme != d_es) @@ -436,11 +424,41 @@ evaluation(struct_processus *s_etat_proc } } + autorisation_empilement_programme = (*s_etat_processus) + .autorisation_empilement_programme; + + empilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + if (presence_variable_partagee == d_vrai) + { + liberation(s_etat_processus, s_copie_variable_partagee); + } + + (*s_etat_processus).instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus).l_base_pile_systeme) + .retour_definition = 'Y'; + (*(*s_etat_processus).l_base_pile_systeme) + .origine_routine_evaluation = 'Y'; + + (*s_etat_processus).mode_execution_programme = 'Y'; + (*s_etat_processus).autorisation_empilement_programme = 'N'; + + (*(*s_etat_processus).l_base_pile_systeme) + .niveau_courant = (*s_etat_processus) + .niveau_courant; + + empilement_pile_systeme(s_etat_processus); + if (presence_variable_partagee == d_faux) { - if (evaluation(s_etat_processus, (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, + if (evaluation(s_etat_processus, (*(*s_etat_processus) + .pointeur_variable_courante).objet, type_evaluation) == d_erreur) { if ((*s_etat_processus).profilage == d_vrai) @@ -488,8 +506,18 @@ evaluation(struct_processus *s_etat_proc profilage(s_etat_processus, NULL); } + depilement_pile_systeme(s_etat_processus); + depilement_pile_systeme(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + return(d_erreur); + } + (*s_etat_processus).evaluation_expression_compilee = registre_evaluation_expression_compilee; + (*s_etat_processus).autorisation_empilement_programme = + autorisation_empilement_programme; } else if ((*s_etat_processus).erreur_execution != d_ex_nom_implicite) { @@ -730,6 +758,8 @@ evaluation(struct_processus *s_etat_proc registre_retour_definition = (*(*s_etat_processus).l_base_pile_systeme) .retour_definition; (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N'; + (*(*s_etat_processus).l_base_pile_systeme).pointeur_adresse_retour = + s_objet; l_element_courant = (struct_liste_chainee *) (*s_objet).objet; autorisation_empilement_programme = (*s_etat_processus) @@ -793,8 +823,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -883,9 +913,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -903,6 +935,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -915,6 +955,34 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -958,6 +1026,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -970,8 +1046,183 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour + // la fin d'une section + // critique + + if ((*s_etat_processus) + .l_base_pile_systeme + == NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + liberation( + s_etat_processus, + s_objet_evalue); + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -1055,9 +1306,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -1068,11 +1321,47 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; } else { @@ -1110,20 +1399,157 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } - else + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + depilement_pile_systeme( s_etat_processus); + } + else + { + // Traitement spécifique pour + // la fin d'une section + // critique if ((*s_etat_processus) - .erreur_systeme != d_es) + .l_base_pile_systeme + == NULL) { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + if (presence_egalite == d_vrai) { @@ -1137,6 +1563,56 @@ evaluation(struct_processus *s_etat_proc instruction_courante; return(d_erreur); } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + + depilement_pile_systeme( + s_etat_processus); + } + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); } } } @@ -1208,9 +1684,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -1221,12 +1699,48 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -1263,6 +1777,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -1277,8 +1799,186 @@ evaluation(struct_processus *s_etat_proc break; } } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour + // la fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme + == NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -1320,8 +2020,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -1631,9 +2331,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante).objet + == NULL) { if (pthread_mutex_lock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -1643,22 +2342,18 @@ evaluation(struct_processus *s_etat_proc } if (recherche_variable_partagee(s_etat_processus, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).nom, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]) - .variable_partagee, 'E') == d_vrai) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante).variable_partagee, + 'E') == d_vrai) { // Une variable partagée existe. presence_variable_partagee = d_vrai; - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet = - (*(*s_etat_processus) + (*(*s_etat_processus).pointeur_variable_courante) + .objet = (*(*s_etat_processus) .s_liste_variables_partagees).table [(*(*s_etat_processus) .s_liste_variables_partagees) @@ -1685,8 +2380,7 @@ evaluation(struct_processus *s_etat_proc * Recherche d'un élément dans un vecteur */ - if (((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) + if ((*(*s_etat_processus).pointeur_variable_courante) .objet == NULL) { // La variable partagée n'existe plus. @@ -1699,9 +2393,8 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet = + (*(*s_etat_processus) + .pointeur_variable_courante).objet = NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) @@ -1718,15 +2411,12 @@ evaluation(struct_processus *s_etat_proc return(d_erreur);; } } - else if ((((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == VIN) || - ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == VRL) || - ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == VCX)) + else if ((((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VIN) || + ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VRL) || + ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VCX)) && ((*((struct_fonction *) (*(*l_element_courant) .donnee).objet)).nombre_arguments == 1)) { @@ -1737,9 +2427,8 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet = + (*(*s_etat_processus) + .pointeur_variable_courante).objet = NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) @@ -1765,16 +2454,15 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } - if ((*s_objet_indice_i).type == INT) + if ((*s_objet_indice_i).type != INT) { liberation(s_etat_processus, s_objet_indice_i); free(s_objet_elementaire); if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet = + (*(*s_etat_processus) + .pointeur_variable_courante).objet = NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) @@ -1805,18 +2493,16 @@ evaluation(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet_indice_i); if ((i < 1) || (i > (integer8) (*((struct_vecteur *) - (*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).objet)) .taille)) { free(s_objet_elementaire); if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet = + (*(*s_etat_processus) + .pointeur_variable_courante).objet = NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) @@ -1842,9 +2528,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } - if ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)).type + if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VIN) { if (((*s_objet_elementaire).objet = malloc(sizeof( @@ -1858,10 +2543,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -1883,14 +2567,12 @@ evaluation(struct_processus *s_etat_proc (*s_objet_elementaire).type = INT; (*((integer8 *) (*s_objet_elementaire).objet)) = ((integer8 *) (*((struct_vecteur *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1]; } - else if ((*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).type + else if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VRL) { if (((*s_objet_elementaire).objet = malloc(sizeof( @@ -1898,10 +2580,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -1929,14 +2610,12 @@ evaluation(struct_processus *s_etat_proc (*s_objet_elementaire).type = REL; (*((real8 *) (*s_objet_elementaire).objet)) = ((real8 *) (*((struct_vecteur *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1]; } - else if ((*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).type + else if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == VCX) { if (((*s_objet_elementaire).objet = malloc(sizeof( @@ -1944,10 +2623,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -1976,19 +2654,15 @@ evaluation(struct_processus *s_etat_proc (*((struct_complexe16 *) (*s_objet_elementaire) .objet)).partie_reelle = ((struct_complexe16 *) (*((struct_vecteur *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) - .objet)).tableau)[i - 1] - .partie_reelle; + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) + .objet)).tableau)[i - 1].partie_reelle; (*((struct_complexe16 *) (*s_objet_elementaire) .objet)).partie_imaginaire = ((struct_complexe16 *) (*((struct_vecteur *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) - .objet)).tableau)[i - 1] - .partie_imaginaire; + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) + .objet)).tableau)[i - 1].partie_imaginaire; } } @@ -1996,15 +2670,12 @@ evaluation(struct_processus *s_etat_proc * Recherche d'un élément dans une matrice */ - else if ((((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == MIN) || - ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == MRL) || - ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == MCX)) + else if ((((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == MIN) || + ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == MRL) || + ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == MCX)) && ((*((struct_fonction *) (*(*l_element_courant) .donnee).objet)).nombre_arguments == 2)) { @@ -2015,10 +2686,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2052,10 +2722,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2090,10 +2759,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2126,25 +2794,20 @@ evaluation(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet_indice_j); if ((i < 1) || (i > (integer8) (*((struct_matrice *) - (*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).objet)) .nombre_lignes) || (j < 1) || (j > (integer8) - (*((struct_matrice *) (*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).objet)) + (*((struct_matrice *) (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).objet)) .nombre_colonnes)) { - liberation(s_etat_processus, s_objet_indice_i); - liberation(s_etat_processus, s_objet_indice_j); free(s_objet_elementaire); if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2170,20 +2833,17 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } - if ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)).type - == MIN) + if ((*((*(*s_etat_processus).pointeur_variable_courante) + .objet)).type == MIN) { if (((*s_objet_elementaire).objet = malloc(sizeof( integer8))) == NULL) { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2211,14 +2871,12 @@ evaluation(struct_processus *s_etat_proc (*s_objet_elementaire).type = INT; (*((integer8 *) (*s_objet_elementaire).objet)) = ((integer8 **) (*((struct_matrice *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1][j - 1]; } - else if ((*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).type + else if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == MRL) { if (((*s_objet_elementaire).objet = malloc(sizeof( @@ -2226,10 +2884,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2257,14 +2914,12 @@ evaluation(struct_processus *s_etat_proc (*s_objet_elementaire).type = REL; (*((real8 *) (*s_objet_elementaire).objet)) = ((real8 **) (*((struct_matrice *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1][j - 1]; } - else if ((*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).type + else if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == MCX) { if (((*s_objet_elementaire).objet = malloc(sizeof( @@ -2272,10 +2927,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2305,18 +2959,16 @@ evaluation(struct_processus *s_etat_proc .objet)).partie_reelle = ((struct_complexe16 **) (*((struct_matrice *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1][j - 1] .partie_reelle; (*((struct_complexe16 *) (*s_objet_elementaire) .objet)).partie_imaginaire = ((struct_complexe16 **) (*((struct_matrice *) - (*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet)) + (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)) .objet)).tableau)[i - 1][j - 1] .partie_imaginaire; } @@ -2326,9 +2978,8 @@ evaluation(struct_processus *s_etat_proc * Recherche de l'élément idoine dans la liste */ - else if (((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == LST) && + else if (((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == LST) && ((*((struct_fonction *) (*(*l_element_courant) .donnee).objet)).nombre_arguments == 1)) { @@ -2339,10 +2990,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2375,10 +3025,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2408,9 +3057,8 @@ evaluation(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet_indice_i); - l_sous_element_courant = (*(((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet)).objet; + l_sous_element_courant = (*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).objet; j = 0; while(l_sous_element_courant != NULL) @@ -2430,10 +3078,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2467,10 +3114,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2499,9 +3145,8 @@ evaluation(struct_processus *s_etat_proc * Recherche de l'élément idoine dans la table */ - else if (((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == TAB) && + else if (((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == TBL) && ((*((struct_fonction *) (*(*l_element_courant) .donnee).objet)).nombre_arguments == 1)) { @@ -2512,10 +3157,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2548,10 +3192,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2582,19 +3225,17 @@ evaluation(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet_indice_i); if ((i < 1) || (i > (integer8) (*((struct_tableau *) - (*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).objet) + (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet)).nombre_elements)) { free(s_objet_elementaire); if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2624,17 +3265,15 @@ evaluation(struct_processus *s_etat_proc if ((s_objet_elementaire = copie_objet(s_etat_processus, - (*((struct_tableau *) (*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet) + (*((struct_tableau *) (*(*(*s_etat_processus) + .pointeur_variable_courante).objet) .objet)).elements[i - 1], 'P')) == NULL) { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2658,23 +3297,18 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } } - else if (((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == ALG) || - ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == RPN)) + else if (((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == ALG) || + ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == RPN)) { registre_evaluation_expression_compilee = (*s_etat_processus) .evaluation_expression_compilee; - if (((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].origine == 'E') && - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante] - .niveau == 0)) + if (((*(*s_etat_processus).pointeur_variable_courante) + .origine == 'E') && ((*(*s_etat_processus) + .pointeur_variable_courante).niveau == 0)) { (*s_etat_processus).evaluation_expression_compilee = 'Y'; @@ -2685,9 +3319,8 @@ evaluation(struct_processus *s_etat_proc 'N'; } - if (evaluation(s_etat_processus, (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, + if (evaluation(s_etat_processus, (*(*s_etat_processus) + .pointeur_variable_courante).objet, type_evaluation) == d_erreur) { (*s_etat_processus).evaluation_expression_compilee = @@ -2695,10 +3328,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2733,10 +3365,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2762,9 +3393,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } } - else if ((*(((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]) - .objet)).type == ADR) + else if ((*((*(*s_etat_processus) + .pointeur_variable_courante).objet)).type == ADR) { autorisation_empilement_programme = (*s_etat_processus) .autorisation_empilement_programme; @@ -2777,10 +3407,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2817,26 +3446,22 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).position_courante = (*((unsigned long *) - ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).objet))); + ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).objet))); if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].nom); + (*(*s_etat_processus) + .pointeur_variable_courante).nom); if ((*s_etat_processus).erreur_systeme != d_es) { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock( &((*(*s_etat_processus) @@ -2867,10 +3492,9 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees) @@ -2905,10 +3529,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees) @@ -2941,10 +3564,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) @@ -2973,10 +3595,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees) .mutex)) != 0) @@ -3006,10 +3627,9 @@ evaluation(struct_processus *s_etat_proc { if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = + NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -3031,10 +3651,8 @@ evaluation(struct_processus *s_etat_proc if (presence_variable_partagee == d_vrai) { - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet - = NULL; + (*(*s_etat_processus) + .pointeur_variable_courante).objet = NULL; if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -3199,8 +3817,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -3288,9 +3906,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -3308,6 +3928,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -3320,6 +3948,34 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -3363,6 +4019,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -3375,8 +4039,186 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -3498,9 +4340,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -3511,11 +4355,47 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; } else { @@ -3553,14 +4433,200 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -3648,9 +4714,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -3661,11 +4729,47 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; } else { @@ -3703,14 +4807,200 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -3752,8 +5042,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -3780,8 +5070,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -3869,9 +5159,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -3889,6 +5181,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -3901,6 +5201,34 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -3944,6 +5272,14 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; @@ -3956,8 +5292,186 @@ evaluation(struct_processus *s_etat_proc .erreur_execution = registre_erreur_execution; } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -4079,9 +5593,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -4092,12 +5608,48 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -4134,14 +5686,200 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -4229,9 +5967,11 @@ evaluation(struct_processus *s_etat_proc TEST(instruction_do) || TEST(instruction_while) || TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start) || TEST(instruction_select) || TEST(instruction_case) || + TEST(instruction_critical) || TEST(vers_niveau_superieur)) { if (TEST(vers_niveau_superieur)) @@ -4242,12 +5982,48 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if (TEST(instruction_for) || + TEST(instruction_forall) || + TEST(instruction_start)) + { + empilement_pile_systeme( + s_etat_processus); + + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture = 'L'; + } else { empilement_pile_systeme( @@ -4284,14 +6060,200 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .erreur_systeme != d_es) { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + (*s_etat_processus) .instruction_courante = instruction_courante; return(d_erreur); } } + else if ((TEST(instruction_next) || + TEST(instruction_step)) && + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'L')) + { + /* + * Libération des compteurs + * de boucle + */ + + presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || + ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'A')) + ? d_vrai : d_faux; + + if (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture != 'S') && + (presence_compteur == + d_faux)) + { + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if (presence_compteur == d_vrai) + { + if (recherche_variable( + s_etat_processus, + (*(*s_etat_processus) + .l_base_pile_systeme) + .nom_variable) == + d_faux) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_erreur_traitement_boucle; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .pointeur_variable_courante) + .objet == NULL) + { + (*s_etat_processus) + .erreur_systeme = d_es; + (*s_etat_processus) + .erreur_execution = + d_ex_variable_partagee; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .niveau_courant--; + + if ( + retrait_variable_par_niveau( + s_etat_processus) == + d_erreur) + { + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + } + + depilement_pile_systeme( + s_etat_processus); + } else { + // Traitement spécifique pour la + // fin d'une section critique + + if ((*s_etat_processus) + .l_base_pile_systeme == + NULL) + { + (*s_etat_processus) + .erreur_systeme = + d_es_end_incoherent; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + if ((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'Q') + { + if (pthread_mutex_unlock( + &mutex_sections_critiques) + != 0) + { + (*s_etat_processus) + .erreur_systeme = + d_es_processus; + + if (presence_egalite == + d_vrai) + { + liberation( + s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); + } + + (*s_etat_processus) + .sections_critiques--; + } + depilement_pile_systeme( s_etat_processus); @@ -4333,8 +6295,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus) .var_volatile_processus_pere == 0) { - kill((*s_etat_processus) - .pid_processus_pere, SIGALRM); + envoi_signal_processus((*s_etat_processus) + .pid_processus_pere, rpl_sigalrm); } else { @@ -4410,9 +6372,8 @@ evaluation(struct_processus *s_etat_proc { if ((*s_etat_processus).traitement_symbolique == 'N') { - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet == NULL) + if ((*(*s_etat_processus) + .pointeur_variable_courante).objet == NULL) { // Variable partagée @@ -4428,13 +6389,10 @@ evaluation(struct_processus *s_etat_proc presence_variable_partagee = d_faux; if (recherche_variable_partagee( - s_etat_processus, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).nom, - ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante]) + s_etat_processus, (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante) .variable_partagee, 'E') == d_vrai) { presence_variable = d_vrai; @@ -4512,11 +6470,9 @@ evaluation(struct_processus *s_etat_proc { presence_variable = d_vrai; - if ((*((*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).type == ADR) + if ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet) + .type == ADR) { presence_fonction = d_vrai; } @@ -4532,123 +6488,157 @@ evaluation(struct_processus *s_etat_proc if (presence_fonction == d_vrai) { - autorisation_empilement_programme = (*s_etat_processus) - .autorisation_empilement_programme; - registre_position_courante = (*s_etat_processus) - .position_courante; - - empilement_pile_systeme(s_etat_processus); - - if ((*s_etat_processus).erreur_systeme != d_es) + if ((*((struct_nom *) (*(*l_element_courant).donnee) + .objet)).symbole == d_vrai) { - if (presence_variable_partagee == d_vrai) + // L'objet apparaît comme un symbole dans + // l'expression en cours d'évaluation. On se + // contente de l'empiler. + + if ((s_sous_objet = copie_objet(s_etat_processus, + (*l_element_courant).donnee, 'P')) == NULL) { - liberation(s_etat_processus, - s_copie_variable_partagee); + (*s_etat_processus).instruction_courante = + instruction_courante; + + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return(d_erreur); } - if (presence_egalite == d_vrai) + if (empilement(s_etat_processus, + &((*s_etat_processus).l_base_pile), + s_sous_objet) == d_erreur) { - liberation(s_etat_processus, s_objet_evalue); + (*s_etat_processus).instruction_courante = + instruction_courante; + liberation(s_etat_processus, s_sous_objet); + return(d_erreur); } - - (*s_etat_processus).instruction_courante = - instruction_courante; - return(d_erreur); - } - - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = 'Y'; - (*(*s_etat_processus).l_base_pile_systeme) - .origine_routine_evaluation = 'Y'; - - (*s_etat_processus).mode_execution_programme = 'Y'; - (*s_etat_processus).autorisation_empilement_programme - = 'N'; - - (*(*s_etat_processus).l_base_pile_systeme) - .niveau_courant = (*s_etat_processus) - .niveau_courant; - - if (presence_variable_partagee == d_faux) - { - (*s_etat_processus).position_courante = - (*((unsigned long *) - ((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante] - .objet)).objet))); } else { - (*s_etat_processus).position_courante = - (*((unsigned long *) - (*s_copie_variable_partagee).objet)); - liberation(s_etat_processus, - s_copie_variable_partagee); - } + autorisation_empilement_programme = + (*s_etat_processus) + .autorisation_empilement_programme; + registre_position_courante = (*s_etat_processus) + .position_courante; - if ((*s_etat_processus).profilage == d_vrai) - { - profilage(s_etat_processus, - (*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].nom); + empilement_pile_systeme(s_etat_processus); if ((*s_etat_processus).erreur_systeme != d_es) { + if (presence_variable_partagee == d_vrai) + { + liberation(s_etat_processus, + s_copie_variable_partagee); + } + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).instruction_courante = + instruction_courante; return(d_erreur); } - } - registre_evaluation_forcee = - (*s_etat_processus).evaluation_forcee; + (*(*s_etat_processus).l_base_pile_systeme) + .retour_definition = 'Y'; + (*(*s_etat_processus).l_base_pile_systeme) + .origine_routine_evaluation = 'Y'; - if (type_evaluation == 'N') - { - (*s_etat_processus).evaluation_forcee = 'Y'; - } + (*s_etat_processus).mode_execution_programme = 'Y'; + (*s_etat_processus) + .autorisation_empilement_programme = 'N'; - if (sequenceur(s_etat_processus) == d_erreur) - { - (*s_etat_processus).evaluation_forcee = - registre_evaluation_forcee; + (*(*s_etat_processus).l_base_pile_systeme) + .niveau_courant = (*s_etat_processus) + .niveau_courant; - if (presence_egalite == d_vrai) + if (presence_variable_partagee == d_faux) { - liberation(s_etat_processus, s_objet_evalue); + (*s_etat_processus).position_courante = + (*((unsigned long *) + ((*(*(*s_etat_processus) + .pointeur_variable_courante) + .objet).objet))); + } + else + { + (*s_etat_processus).position_courante = + (*((unsigned long *) + (*s_copie_variable_partagee).objet)); + liberation(s_etat_processus, + s_copie_variable_partagee); + } + + if ((*s_etat_processus).profilage == d_vrai) + { + profilage(s_etat_processus, + (*(*s_etat_processus) + .pointeur_variable_courante).nom); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + return(d_erreur); + } + } + + registre_evaluation_forcee = + (*s_etat_processus).evaluation_forcee; + + if (type_evaluation == 'N') + { + (*s_etat_processus).evaluation_forcee = 'Y'; } + if (sequenceur(s_etat_processus) == d_erreur) + { + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).instruction_courante = + instruction_courante; + (*s_etat_processus).mode_execution_programme = + registre_mode_execution_programme; + return(d_erreur); + } + + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; (*s_etat_processus).instruction_courante = instruction_courante; - (*s_etat_processus).mode_execution_programme = - registre_mode_execution_programme; - return(d_erreur); - } + (*s_etat_processus).mode_execution_programme = 'N'; - (*s_etat_processus).evaluation_forcee = - registre_evaluation_forcee; - (*s_etat_processus).instruction_courante = - instruction_courante; - (*s_etat_processus).mode_execution_programme = 'N'; + depilement_pile_systeme(s_etat_processus); - depilement_pile_systeme(s_etat_processus); - - if ((*s_etat_processus).erreur_systeme != d_es) - { - if (presence_egalite == d_vrai) + if ((*s_etat_processus).erreur_systeme != d_es) { - liberation(s_etat_processus, s_objet_evalue); + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + return(d_erreur); } - return(d_erreur); + (*s_etat_processus).retour_routine_evaluation = 'N'; + (*s_etat_processus).position_courante = + registre_position_courante; + (*s_etat_processus) + .autorisation_empilement_programme = + autorisation_empilement_programme; } - - (*s_etat_processus).retour_routine_evaluation = 'N'; - (*s_etat_processus).position_courante = - registre_position_courante; - (*s_etat_processus).autorisation_empilement_programme = - autorisation_empilement_programme; } else if (((type_evaluation == 'N') || ((*((struct_nom *) (*(*l_element_courant).donnee).objet)).symbole == @@ -4660,9 +6650,8 @@ evaluation(struct_processus *s_etat_proc { if ((s_sous_objet = copie_objet(s_etat_processus, - (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, + (*(*s_etat_processus) + .pointeur_variable_courante).objet, 'P')) == NULL) { if (presence_variable_partagee == d_vrai) @@ -4731,12 +6720,10 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus) .evaluation_expression_compilee; - if (((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].origine == 'E') - && ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].niveau == 0)) + if (((*(*s_etat_processus) + .pointeur_variable_courante) + .origine == 'E') && ((*(*s_etat_processus) + .pointeur_variable_courante).niveau == 0)) { (*s_etat_processus) .evaluation_expression_compilee = 'Y'; @@ -4752,10 +6739,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, - (*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante].nom); + (*(*s_etat_processus) + .pointeur_variable_courante).nom); if ((*s_etat_processus).erreur_systeme != d_es) @@ -4778,9 +6763,8 @@ evaluation(struct_processus *s_etat_proc empilement_pile_systeme(s_etat_processus); if (evaluation(s_etat_processus, - (*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet, + (*(*s_etat_processus) + .pointeur_variable_courante).objet, type_evaluation) == d_erreur) { depilement_pile_systeme(s_etat_processus); @@ -4828,10 +6812,8 @@ evaluation(struct_processus *s_etat_proc if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, - (*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante].nom); + (*(*s_etat_processus) + .pointeur_variable_courante).nom); if ((*s_etat_processus).erreur_systeme != d_es) @@ -4935,9 +6917,8 @@ evaluation(struct_processus *s_etat_proc (*((struct_nom *) (*s_objet_elementaire) .objet)).nom) == d_vrai) { - if ((*s_etat_processus).s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet + if ((*(*s_etat_processus) + .pointeur_variable_courante).objet == NULL) { // Variable partagée @@ -4954,14 +6935,10 @@ evaluation(struct_processus *s_etat_proc if (recherche_variable_partagee( s_etat_processus, - ((*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante]).nom, - ((*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante]) + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante) .variable_partagee, 'E') == d_vrai) { liberation(s_etat_processus, @@ -5021,10 +6998,8 @@ evaluation(struct_processus *s_etat_proc if ((s_objet_elementaire = copie_objet(s_etat_processus, - (*s_etat_processus) - .s_liste_variables - [(*s_etat_processus) - .position_variable_courante].objet, + (*(*s_etat_processus) + .pointeur_variable_courante).objet, 'P')) == NULL) { if (presence_egalite == d_vrai) @@ -5151,21 +7126,6 @@ evaluation(struct_processus *s_etat_proc // Traitement de l'instruction EXIT en mode interactif - if (l_element_courant != NULL) - { - l_element_courant = (*l_element_courant).suivant; - } - else - { - (*s_etat_processus).mode_execution_programme = 'Y'; - - if ((*s_etat_processus).niveau_courant == 1) - { - (*s_etat_processus).debug_programme = d_faux; - (*s_etat_processus).execution_pas_suivant = d_vrai; - } - } - if ((*s_etat_processus).traitement_cycle_exit != 'N') { registre_expression_courante = @@ -5192,6 +7152,22 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).expression_courante = registre_expression_courante; } + + if (l_element_courant != NULL) + { + l_element_courant = (*l_element_courant).suivant; + } + else + { + (*s_etat_processus).mode_execution_programme = 'Y'; + + if ((*s_etat_processus).niveau_courant == 1) + { + (*s_etat_processus).debug_programme = d_faux; + (*s_etat_processus).execution_pas_suivant = d_vrai; + } + } + } if (niveau_initial < (*s_etat_processus).niveau_courant) @@ -5203,50 +7179,10 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).niveau_courant = niveau_initial; - for(m = 0, n = 0; n < (*s_etat_processus).nombre_variables; n++) + if (retrait_variable_par_niveau(s_etat_processus) == d_erreur) { - if ((*s_etat_processus).s_liste_variables[n].niveau - > niveau_initial) - { - m++; - } - } - - registre_variables = (*s_etat_processus).s_liste_variables; - (*s_etat_processus).nombre_variables -= m; - - if (((*s_etat_processus).s_liste_variables = malloc( - (*s_etat_processus).nombre_variables * - sizeof(struct_variable))) == NULL) - { - if (presence_egalite == d_vrai) - { - liberation(s_etat_processus, s_objet_evalue); - } - - (*s_etat_processus).instruction_courante = instruction_courante; - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(d_erreur); } - - for(m = 0, n = 0; n < (*s_etat_processus).nombre_variables; n++) - { - if (registre_variables[n + m].niveau > niveau_initial) - { - free(registre_variables[n + m].nom); - liberation(s_etat_processus, - registre_variables[n + m].objet); - m++; - n--; - } - else - { - (*s_etat_processus).s_liste_variables[n] = - registre_variables[n + m]; - } - } - - free(registre_variables); } /* @@ -5393,16 +7329,27 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).instruction_courante = (*((struct_fonction *) (*s_objet).objet)).nom_fonction; + registre_type_evaluation = (test_cfsf(s_etat_processus, 35) == d_vrai) + ? 'E' : 'N'; + cf(s_etat_processus, 35); + analyse(s_etat_processus, (*((struct_fonction *) (*s_objet).objet)).fonction); - (*s_etat_processus).instruction_courante = instruction_courante; + if (registre_type_evaluation == 'E') + { + sf(s_etat_processus, 35); + } + else + { + cf(s_etat_processus, 35); + } + if (((*s_etat_processus).erreur_systeme != d_es) || ((*s_etat_processus).erreur_execution != d_ex) || ((*s_etat_processus).exception != d_ep)) { - (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; return(d_erreur); @@ -5410,18 +7357,18 @@ evaluation(struct_processus *s_etat_proc } else { + (*s_etat_processus).instruction_courante = instruction_courante; + if ((s_objet_tampon = copie_objet(s_etat_processus, s_objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - (*s_etat_processus).instruction_courante = instruction_courante; return(d_erreur); } if (empilement(s_etat_processus, &((*s_etat_processus) .l_base_pile), s_objet_tampon) == d_erreur) { - (*s_etat_processus).instruction_courante = instruction_courante; return(d_erreur); } }