Diff for /rpl/src/evaluation.c between versions 1.35 and 1.58

version 1.35, 2011/04/20 08:26:04 version 1.58, 2012/09/30 20:46:46
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.0.prerelease.0    RPL/2 (R) version 4.1.10
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 51  evaluation(struct_processus *s_etat_proc Line 51  evaluation(struct_processus *s_etat_proc
   
     logical1                        drapeau_then;      logical1                        drapeau_then;
     logical1                        erreur_evaluation;      logical1                        erreur_evaluation;
       logical1                        presence_compteur;
     logical1                        presence_egalite;      logical1                        presence_egalite;
     logical1                        presence_fonction;      logical1                        presence_fonction;
     logical1                        presence_variable;      logical1                        presence_variable;
Line 822  evaluation(struct_processus *s_etat_proc Line 823  evaluation(struct_processus *s_etat_proc
                         if ((*s_etat_processus).var_volatile_processus_pere                          if ((*s_etat_processus).var_volatile_processus_pere
                                 == 0)                                  == 0)
                         {                          {
                             kill((*s_etat_processus)                              envoi_signal_processus((*s_etat_processus)
                                     .pid_processus_pere, SIGALRM);                                      .pid_processus_pere, rpl_sigalrm);
                         }                          }
                         else                          else
                         {                          {
Line 912  evaluation(struct_processus *s_etat_proc Line 913  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 932  evaluation(struct_processus *s_etat_proc Line 935  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 944  evaluation(struct_processus *s_etat_proc Line 955  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              else
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 987  evaluation(struct_processus *s_etat_proc Line 1026  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 999  evaluation(struct_processus *s_etat_proc Line 1046  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 1084  evaluation(struct_processus *s_etat_proc Line 1306  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 1097  evaluation(struct_processus *s_etat_proc Line 1321  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .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)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      return(d_erreur);
                                                 }                                                  }
   
                                                   (*(*s_etat_processus)
                                                           .l_base_pile_systeme)
                                                           .type_cloture = 'L';
                                             }                                              }
                                             else                                              else
                                             {                                              {
Line 1139  evaluation(struct_processus *s_etat_proc Line 1399  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .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)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
                                             }                                              }
Line 1237  evaluation(struct_processus *s_etat_proc Line 1684  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 1250  evaluation(struct_processus *s_etat_proc Line 1699  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .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)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      return(d_erreur);
                                                 }                                                  }
   
                                                   (*(*s_etat_processus)
                                                           .l_base_pile_systeme)
                                                           .type_cloture = 'L';
                                             }                                              }
                                             else                                              else
                                             {                                              {
Line 1292  evaluation(struct_processus *s_etat_proc Line 1777  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 1306  evaluation(struct_processus *s_etat_proc Line 1799  evaluation(struct_processus *s_etat_proc
                                                     break;                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 1349  evaluation(struct_processus *s_etat_proc Line 2020  evaluation(struct_processus *s_etat_proc
                             if ((*s_etat_processus)                              if ((*s_etat_processus)
                                     .var_volatile_processus_pere == 0)                                      .var_volatile_processus_pere == 0)
                             {                              {
                                 kill((*s_etat_processus)                                  envoi_signal_processus((*s_etat_processus)
                                         .pid_processus_pere, SIGALRM);                                          .pid_processus_pere, rpl_sigalrm);
                             }                              }
                             else                              else
                             {                              {
Line 3146  evaluation(struct_processus *s_etat_proc Line 3817  evaluation(struct_processus *s_etat_proc
                         if ((*s_etat_processus).var_volatile_processus_pere                          if ((*s_etat_processus).var_volatile_processus_pere
                                 == 0)                                  == 0)
                         {                          {
                             kill((*s_etat_processus)                              envoi_signal_processus((*s_etat_processus)
                                     .pid_processus_pere, SIGALRM);                                      .pid_processus_pere, rpl_sigalrm);
                         }                          }
                         else                          else
                         {                          {
Line 3235  evaluation(struct_processus *s_etat_proc Line 3906  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 3255  evaluation(struct_processus *s_etat_proc Line 3928  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 3267  evaluation(struct_processus *s_etat_proc Line 3948  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              else
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 3310  evaluation(struct_processus *s_etat_proc Line 4019  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 3322  evaluation(struct_processus *s_etat_proc Line 4039  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 3445  evaluation(struct_processus *s_etat_proc Line 4340  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 3458  evaluation(struct_processus *s_etat_proc Line 4355  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .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)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      return(d_erreur);
                                                 }                                                  }
   
                                                   (*(*s_etat_processus)
                                                           .l_base_pile_systeme)
                                                           .type_cloture = 'L';
                                             }                                              }
                                             else                                              else
                                             {                                              {
Line 3500  evaluation(struct_processus *s_etat_proc Line 4433  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 3595  evaluation(struct_processus *s_etat_proc Line 4714  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 3608  evaluation(struct_processus *s_etat_proc Line 4729  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              else
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 3650  evaluation(struct_processus *s_etat_proc Line 4807  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 3699  evaluation(struct_processus *s_etat_proc Line 5042  evaluation(struct_processus *s_etat_proc
                             if ((*s_etat_processus)                              if ((*s_etat_processus)
                                     .var_volatile_processus_pere == 0)                                      .var_volatile_processus_pere == 0)
                             {                              {
                                 kill((*s_etat_processus)                                  envoi_signal_processus((*s_etat_processus)
                                         .pid_processus_pere, SIGALRM);                                          .pid_processus_pere, rpl_sigalrm);
                             }                              }
                             else                              else
                             {                              {
Line 3727  evaluation(struct_processus *s_etat_proc Line 5070  evaluation(struct_processus *s_etat_proc
                         if ((*s_etat_processus).var_volatile_processus_pere                          if ((*s_etat_processus).var_volatile_processus_pere
                                 == 0)                                  == 0)
                         {                          {
                             kill((*s_etat_processus)                              envoi_signal_processus((*s_etat_processus)
                                     .pid_processus_pere, SIGALRM);                                      .pid_processus_pere, rpl_sigalrm);
                         }                          }
                         else                          else
                         {                          {
Line 3816  evaluation(struct_processus *s_etat_proc Line 5159  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 3836  evaluation(struct_processus *s_etat_proc Line 5181  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 3848  evaluation(struct_processus *s_etat_proc Line 5201  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              else
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 3891  evaluation(struct_processus *s_etat_proc Line 5272  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
Line 3903  evaluation(struct_processus *s_etat_proc Line 5292  evaluation(struct_processus *s_etat_proc
                                                     .erreur_execution =                                                      .erreur_execution =
                                                     registre_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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 4026  evaluation(struct_processus *s_etat_proc Line 5593  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 4039  evaluation(struct_processus *s_etat_proc Line 5608  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .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)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      return(d_erreur);
                                                 }                                                  }
   
                                                   (*(*s_etat_processus)
                                                           .l_base_pile_systeme)
                                                           .type_cloture = 'L';
                                             }                                              }
                                             else                                              else
                                             {                                              {
Line 4081  evaluation(struct_processus *s_etat_proc Line 5686  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 4176  evaluation(struct_processus *s_etat_proc Line 5967  evaluation(struct_processus *s_etat_proc
                                                 TEST(instruction_do) ||                                                  TEST(instruction_do) ||
                                                 TEST(instruction_while) ||                                                  TEST(instruction_while) ||
                                                 TEST(instruction_for) ||                                                  TEST(instruction_for) ||
                                                   TEST(instruction_forall) ||
                                                 TEST(instruction_start) ||                                                  TEST(instruction_start) ||
                                                 TEST(instruction_select) ||                                                  TEST(instruction_select) ||
                                                 TEST(instruction_case) ||                                                  TEST(instruction_case) ||
                                                   TEST(instruction_critical) ||
                                                 TEST(vers_niveau_superieur))                                                  TEST(vers_niveau_superieur))
                                         {                                          {
                                             if (TEST(vers_niveau_superieur))                                              if (TEST(vers_niveau_superieur))
Line 4189  evaluation(struct_processus *s_etat_proc Line 5982  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              else
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 4231  evaluation(struct_processus *s_etat_proc Line 6060  evaluation(struct_processus *s_etat_proc
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                          .erreur_systeme != d_es)
                                                 {                                                  {
                                                       if (presence_egalite ==
                                                               d_vrai)
                                                       {
                                                           liberation(
                                                               s_etat_processus,
                                                               s_objet_evalue);
                                                       }
   
                                                     (*s_etat_processus)                                                      (*s_etat_processus)
                                                         .instruction_courante =                                                          .instruction_courante =
                                                         instruction_courante;                                                          instruction_courante;
                                                     return(d_erreur);                                                      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                                              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(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
   
Line 4280  evaluation(struct_processus *s_etat_proc Line 6295  evaluation(struct_processus *s_etat_proc
                             if ((*s_etat_processus)                              if ((*s_etat_processus)
                                     .var_volatile_processus_pere == 0)                                      .var_volatile_processus_pere == 0)
                             {                              {
                                 kill((*s_etat_processus)                                  envoi_signal_processus((*s_etat_processus)
                                         .pid_processus_pere, SIGALRM);                                          .pid_processus_pere, rpl_sigalrm);
                             }                              }
                             else                              else
                             {                              {
Line 5111  evaluation(struct_processus *s_etat_proc Line 7126  evaluation(struct_processus *s_etat_proc
   
             // Traitement de l'instruction EXIT en mode interactif              // 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')              if ((*s_etat_processus).traitement_cycle_exit != 'N')
             {              {
                 registre_expression_courante =                  registre_expression_courante =
Line 5152  evaluation(struct_processus *s_etat_proc Line 7152  evaluation(struct_processus *s_etat_proc
                 (*s_etat_processus).expression_courante =                  (*s_etat_processus).expression_courante =
                         registre_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)          if (niveau_initial < (*s_etat_processus).niveau_courant)

Removed from v.1.35  
changed lines
  Added in v.1.58


CVSweb interface <joel.bertrand@systella.fr>