Diff for /rpl/src/evaluation.c between versions 1.57 and 1.72

version 1.57, 2012/09/29 17:53:02 version 1.72, 2013/03/05 21:02:35
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.10    RPL/2 (R) version 4.1.13
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 95  evaluation(struct_processus *s_etat_proc Line 95  evaluation(struct_processus *s_etat_proc
   
     unsigned long                   k;      unsigned long                   k;
     unsigned long                   l;      unsigned long                   l;
     unsigned long                   n;  
     unsigned long                   niveau_initial;      unsigned long                   niveau_initial;
     unsigned long                   nombre_termes;      unsigned long                   nombre_termes;
     unsigned long                   registre_hauteur_pile_operationnelle;      unsigned long                   registre_hauteur_pile_operationnelle;
     unsigned long                   registre_niveau_courant;  
     unsigned long                   registre_position_courante;      unsigned long                   registre_position_courante;
   
     void                            (*fonction)();      void                            (*fonction)();
Line 181  evaluation(struct_processus *s_etat_proc Line 179  evaluation(struct_processus *s_etat_proc
                     {                      {
                         // Variable partagée                          // Variable partagée
   
                         if (pthread_mutex_lock(&((*(*s_etat_processus)  
                                 .s_liste_variables_partagees).mutex)) != 0)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_processus;  
                             return(d_erreur);  
                         }  
   
                         presence_variable_partagee = d_faux;                          presence_variable_partagee = d_faux;
   
                         if (recherche_variable_partagee(s_etat_processus,                          if (recherche_variable_partagee(s_etat_processus,
Line 196  evaluation(struct_processus *s_etat_proc Line 186  evaluation(struct_processus *s_etat_proc
                                 .pointeur_variable_courante).nom,                                  .pointeur_variable_courante).nom,
                                 (*(*s_etat_processus)                                  (*(*s_etat_processus)
                                 .pointeur_variable_courante)                                  .pointeur_variable_courante)
                                 .variable_partagee, 'E') == d_vrai)                                  .variable_partagee, 'E') != NULL)
                         {                          {
                             presence_variable = d_vrai;                              presence_variable = d_vrai;
                             presence_variable_partagee = d_vrai;                              presence_variable_partagee = d_vrai;
   
                             if ((*((*(*s_etat_processus)                              if ((*(*(*s_etat_processus)
                                     .s_liste_variables_partagees).table                                      .pointeur_variable_partagee_courante).objet)
                                     [(*(*s_etat_processus)                                      .type == ADR)
                                     .s_liste_variables_partagees)  
                                     .position_variable].objet)).type  
                                     == ADR)  
                             {                              {
                                 presence_fonction = d_vrai;                                  presence_fonction = d_vrai;
                             }                              }
Line 214  evaluation(struct_processus *s_etat_proc Line 201  evaluation(struct_processus *s_etat_proc
                             if ((s_copie_variable_partagee =                              if ((s_copie_variable_partagee =
                                     copie_objet(s_etat_processus,                                      copie_objet(s_etat_processus,
                                     (*(*s_etat_processus)                                      (*(*s_etat_processus)
                                     .s_liste_variables_partagees)                                      .pointeur_variable_partagee_courante).objet,
                                     .table[(*(*s_etat_processus)                                      'P')) == NULL)
                                     .s_liste_variables_partagees)  
                                     .position_variable].objet, 'P')) == NULL)  
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                         d_es_allocation_memoire;                                          d_es_allocation_memoire;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 235  evaluation(struct_processus *s_etat_proc Line 220  evaluation(struct_processus *s_etat_proc
                             }                              }
   
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)                              if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                     .s_liste_variables_partagees).mutex))                                      .pointeur_variable_partagee_courante)
                                     != 0)                                      .mutex)) != 0)
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                         d_es_processus;                                          d_es_processus;
Line 248  evaluation(struct_processus *s_etat_proc Line 233  evaluation(struct_processus *s_etat_proc
                             (*s_etat_processus).erreur_systeme = d_es;                              (*s_etat_processus).erreur_systeme = d_es;
                             presence_variable = d_faux;                              presence_variable = d_faux;
                             presence_variable_partagee = d_faux;                              presence_variable_partagee = d_faux;
   
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                                     .s_liste_variables_partagees).mutex)) != 0)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_processus;  
                                 return(d_erreur);  
                             }  
                         }                          }
                     }                      }
                     else                      else
Line 309  evaluation(struct_processus *s_etat_proc Line 286  evaluation(struct_processus *s_etat_proc
                 (*s_etat_processus).autorisation_empilement_programme = 'N';                  (*s_etat_processus).autorisation_empilement_programme = 'N';
   
                 (*(*s_etat_processus).l_base_pile_systeme)                  (*(*s_etat_processus).l_base_pile_systeme)
                         .niveau_courant = (*s_etat_processus)                          .niveau_courant = (*s_etat_processus).niveau_courant;
                         .niveau_courant;  
   
                 if (presence_variable_partagee == d_faux)                  if (presence_variable_partagee == d_faux)
                 {                  {
                     (*s_etat_processus).position_courante =                      (*s_etat_processus).position_courante =
                             (*((unsigned long *)                              (*((unsigned long *) ((*(*(*s_etat_processus)
                             ((*(*(*s_etat_processus).pointeur_variable_courante)                              .pointeur_variable_courante).objet).objet)));
                             .objet).objet)));  
                 }                  }
                 else                  else
                 {                  {
Line 325  evaluation(struct_processus *s_etat_proc Line 300  evaluation(struct_processus *s_etat_proc
                             (*((unsigned long *) (*s_copie_variable_partagee)                              (*((unsigned long *) (*s_copie_variable_partagee)
                             .objet));                              .objet));
                     liberation(s_etat_processus, s_copie_variable_partagee);                      liberation(s_etat_processus, s_copie_variable_partagee);
   
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                             .s_liste_variables_partagees).mutex)) != 0)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_processus;  
                         return(d_erreur);  
                     }  
                 }                  }
   
                 if ((*s_etat_processus).profilage == d_vrai)                  if ((*s_etat_processus).profilage == d_vrai)
Line 409  evaluation(struct_processus *s_etat_proc Line 376  evaluation(struct_processus *s_etat_proc
   
                     if ((*s_etat_processus).erreur_systeme != d_es)                      if ((*s_etat_processus).erreur_systeme != d_es)
                     {                      {
                         if (presence_variable_partagee == d_vrai)  
                         {  
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                                     .s_liste_variables_partagees).mutex)) != 0)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_processus;  
                                 return(d_erreur);  
                             }  
                         }  
   
                         return(d_erreur);                          return(d_erreur);
                     }                      }
                 }                  }
Line 758  evaluation(struct_processus *s_etat_proc Line 714  evaluation(struct_processus *s_etat_proc
         registre_retour_definition = (*(*s_etat_processus).l_base_pile_systeme)          registre_retour_definition = (*(*s_etat_processus).l_base_pile_systeme)
                 .retour_definition;                  .retour_definition;
         (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';          (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';
         (*(*s_etat_processus).l_base_pile_systeme).pointeur_adresse_retour =  
                 s_objet;  
   
         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;          l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
         autorisation_empilement_programme = (*s_etat_processus)          autorisation_empilement_programme = (*s_etat_processus)
Line 802  evaluation(struct_processus *s_etat_proc Line 756  evaluation(struct_processus *s_etat_proc
                             ((*s_etat_processus).erreur_systeme == d_es) &&                              ((*s_etat_processus).erreur_systeme == d_es) &&
                             ((*s_etat_processus).exception == d_ep))                              ((*s_etat_processus).exception == d_ep))
                     {                      {
                           registre_evaluation_expression_compilee =
                                   (*s_etat_processus)
                                   .evaluation_expression_compilee;
   
                           if (((*(*s_etat_processus).pointeur_variable_courante)
                                   .origine == 'E') && ((*(*s_etat_processus)
                                   .pointeur_variable_courante).niveau == 0))
                           {
                               (*s_etat_processus).evaluation_expression_compilee
                                       = 'Y';
                           }
                           else
                           {
                               (*s_etat_processus).evaluation_expression_compilee
                                       = 'N';
                           }
   
                         analyse(s_etat_processus, (*((struct_fonction *)                          analyse(s_etat_processus, (*((struct_fonction *)
                                 (*(*l_element_courant).donnee).objet))                                  (*(*l_element_courant).donnee).objet))
                                 .fonction);                                  .fonction);
   
                           (*s_etat_processus).evaluation_expression_compilee =
                                   registre_evaluation_expression_compilee;
   
                         if (type_evaluation == 'I')                          if (type_evaluation == 'I')
                         {                          {
                             (*s_etat_processus).derniere_erreur_evaluation =                              (*s_etat_processus).derniere_erreur_evaluation =
Line 956  evaluation(struct_processus *s_etat_proc Line 930  evaluation(struct_processus *s_etat_proc
                                                     registre_erreur_execution;                                                      registre_erreur_execution;
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 1057  evaluation(struct_processus *s_etat_proc Line 1032  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 1143  evaluation(struct_processus *s_etat_proc Line 1121  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 1332  evaluation(struct_processus *s_etat_proc Line 1309  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 1420  evaluation(struct_processus *s_etat_proc Line 1398  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 1506  evaluation(struct_processus *s_etat_proc Line 1487  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 1706  evaluation(struct_processus *s_etat_proc Line 1686  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 1802  evaluation(struct_processus *s_etat_proc Line 1783  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 1888  evaluation(struct_processus *s_etat_proc Line 1872  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 2322  evaluation(struct_processus *s_etat_proc Line 2305  evaluation(struct_processus *s_etat_proc
                     if ((*(*s_etat_processus).pointeur_variable_courante).objet                      if ((*(*s_etat_processus).pointeur_variable_courante).objet
                             == NULL)                              == NULL)
                     {                      {
                         if (pthread_mutex_lock(&((*(*s_etat_processus)  
                                 .s_liste_variables_partagees).mutex)) != 0)  
                         {  
                             (*s_etat_processus).erreur_systeme =  
                                     d_es_processus;  
                         }  
   
                         if (recherche_variable_partagee(s_etat_processus,                          if (recherche_variable_partagee(s_etat_processus,
                                 (*(*s_etat_processus)                                  (*(*s_etat_processus)
                                 .pointeur_variable_courante).nom,                                  .pointeur_variable_courante).nom,
                                 (*(*s_etat_processus)                                  (*(*s_etat_processus)
                                 .pointeur_variable_courante).variable_partagee,                                  .pointeur_variable_courante).variable_partagee,
                                 'E') == d_vrai)                                  'E') != NULL)
                         {                          {
                             // Une variable partagée existe.                              // Une variable partagée existe.
   
Line 2342  evaluation(struct_processus *s_etat_proc Line 2318  evaluation(struct_processus *s_etat_proc
   
                             (*(*s_etat_processus).pointeur_variable_courante)                              (*(*s_etat_processus).pointeur_variable_courante)
                                     .objet = (*(*s_etat_processus)                                      .objet = (*(*s_etat_processus)
                                     .s_liste_variables_partagees).table                                      .pointeur_variable_partagee_courante)
                                     [(*(*s_etat_processus)                                      .objet;
                                     .s_liste_variables_partagees)  
                                     .position_variable].objet;  
                         }                          }
                         else                          else
                         {                          {
                             presence_variable_partagee = d_faux;                              presence_variable_partagee = d_faux;
   
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                                     .s_liste_variables_partagees).mutex)) != 0)  
                             {  
                                 (*s_etat_processus).erreur_systeme =  
                                         d_es_processus;  
                             }  
                         }                          }
                     }                      }
                     else                      else
Line 2386  evaluation(struct_processus *s_etat_proc Line 2353  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 2420  evaluation(struct_processus *s_etat_proc Line 2387  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 2454  evaluation(struct_processus *s_etat_proc Line 2421  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 2494  evaluation(struct_processus *s_etat_proc Line 2461  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 2537  evaluation(struct_processus *s_etat_proc Line 2504  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2574  evaluation(struct_processus *s_etat_proc Line 2541  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2617  evaluation(struct_processus *s_etat_proc Line 2584  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2680  evaluation(struct_processus *s_etat_proc Line 2647  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 2716  evaluation(struct_processus *s_etat_proc Line 2683  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 2753  evaluation(struct_processus *s_etat_proc Line 2720  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 2799  evaluation(struct_processus *s_etat_proc Line 2766  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 2835  evaluation(struct_processus *s_etat_proc Line 2802  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2878  evaluation(struct_processus *s_etat_proc Line 2845  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2921  evaluation(struct_processus *s_etat_proc Line 2888  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 2984  evaluation(struct_processus *s_etat_proc Line 2951  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3019  evaluation(struct_processus *s_etat_proc Line 2986  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3072  evaluation(struct_processus *s_etat_proc Line 3039  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3108  evaluation(struct_processus *s_etat_proc Line 3075  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3151  evaluation(struct_processus *s_etat_proc Line 3118  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3186  evaluation(struct_processus *s_etat_proc Line 3153  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3227  evaluation(struct_processus *s_etat_proc Line 3194  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3265  evaluation(struct_processus *s_etat_proc Line 3232  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3322  evaluation(struct_processus *s_etat_proc Line 3289  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3359  evaluation(struct_processus *s_etat_proc Line 3326  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3401  evaluation(struct_processus *s_etat_proc Line 3368  evaluation(struct_processus *s_etat_proc
   
                                 if (pthread_mutex_unlock(                                  if (pthread_mutex_unlock(
                                         &((*(*s_etat_processus)                                          &((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3453  evaluation(struct_processus *s_etat_proc Line 3420  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 3485  evaluation(struct_processus *s_etat_proc Line 3452  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3522  evaluation(struct_processus *s_etat_proc Line 3489  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees)                                          .pointeur_variable_partagee_courante)
                                         .mutex)) != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
Line 3557  evaluation(struct_processus *s_etat_proc Line 3524  evaluation(struct_processus *s_etat_proc
                                         NULL;                                          NULL;
   
                                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                         .s_liste_variables_partagees).mutex))                                          .pointeur_variable_partagee_courante)
                                         != 0)                                          .mutex)) != 0)
                                 {                                  {
                                     (*s_etat_processus).erreur_systeme =                                      (*s_etat_processus).erreur_systeme =
                                             d_es_processus;                                              d_es_processus;
Line 3588  evaluation(struct_processus *s_etat_proc Line 3555  evaluation(struct_processus *s_etat_proc
                                     NULL;                                      NULL;
   
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)                              if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                     .s_liste_variables_partagees) .mutex)) != 0)                                      .pointeur_variable_partagee_courante)
                                       .mutex)) != 0)
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                         d_es_processus;                                          d_es_processus;
Line 3620  evaluation(struct_processus *s_etat_proc Line 3588  evaluation(struct_processus *s_etat_proc
                                     NULL;                                      NULL;
   
                             if (pthread_mutex_unlock(&((*(*s_etat_processus)                              if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                     .s_liste_variables_partagees).mutex)) != 0)                                      .pointeur_variable_partagee_courante)
                                       .mutex)) != 0)
                             {                              {
                                 (*s_etat_processus).erreur_systeme =                                  (*s_etat_processus).erreur_systeme =
                                         d_es_processus;                                          d_es_processus;
Line 3643  evaluation(struct_processus *s_etat_proc Line 3612  evaluation(struct_processus *s_etat_proc
                                 .pointeur_variable_courante).objet = NULL;                                  .pointeur_variable_courante).objet = NULL;
   
                         if (pthread_mutex_unlock(&((*(*s_etat_processus)                          if (pthread_mutex_unlock(&((*(*s_etat_processus)
                                 .s_liste_variables_partagees).mutex)) != 0)                                  .pointeur_variable_partagee_courante).mutex))
                                   != 0)
                         {                          {
                             (*s_etat_processus).erreur_systeme =                              (*s_etat_processus).erreur_systeme =
                                     d_es_processus;                                      d_es_processus;
Line 3937  evaluation(struct_processus *s_etat_proc Line 3907  evaluation(struct_processus *s_etat_proc
                                                     registre_erreur_execution;                                                      registre_erreur_execution;
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 4038  evaluation(struct_processus *s_etat_proc Line 4009  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 4124  evaluation(struct_processus *s_etat_proc Line 4098  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 4354  evaluation(struct_processus *s_etat_proc Line 4327  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 4442  evaluation(struct_processus *s_etat_proc Line 4416  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 4528  evaluation(struct_processus *s_etat_proc Line 4505  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 4724  evaluation(struct_processus *s_etat_proc Line 4700  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 4812  evaluation(struct_processus *s_etat_proc Line 4789  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 4898  evaluation(struct_processus *s_etat_proc Line 4878  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 5178  evaluation(struct_processus *s_etat_proc Line 5157  evaluation(struct_processus *s_etat_proc
                                                     registre_erreur_execution;                                                      registre_erreur_execution;
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 5279  evaluation(struct_processus *s_etat_proc Line 5259  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 5365  evaluation(struct_processus *s_etat_proc Line 5348  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 5595  evaluation(struct_processus *s_etat_proc Line 5577  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 5683  evaluation(struct_processus *s_etat_proc Line 5666  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 5769  evaluation(struct_processus *s_etat_proc Line 5755  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 5965  evaluation(struct_processus *s_etat_proc Line 5950  evaluation(struct_processus *s_etat_proc
                                                 }                                                  }
                                             }                                              }
                                             else if (TEST(instruction_for) ||                                              else if (TEST(instruction_for) ||
                                                       TEST(instruction_forall) ||
                                                     TEST(instruction_start))                                                      TEST(instruction_start))
                                             {                                              {
                                                 empilement_pile_systeme(                                                  empilement_pile_systeme(
Line 6053  evaluation(struct_processus *s_etat_proc Line 6039  evaluation(struct_processus *s_etat_proc
                                                  */                                                   */
   
                                                 presence_compteur =                                                  presence_compteur =
                                                       (((*(*s_etat_processus)
                                                       .l_base_pile_systeme)
                                                       .type_cloture == 'F') ||
                                                     ((*(*s_etat_processus)                                                      ((*(*s_etat_processus)
                                                     .l_base_pile_systeme)                                                      .l_base_pile_systeme)
                                                     .type_cloture == 'F')                                                      .type_cloture == 'A'))
                                                     ? d_vrai : d_faux;                                                      ? d_vrai : d_faux;
   
                                                 if (((*(*s_etat_processus)                                                  if (((*(*s_etat_processus)
Line 6139  evaluation(struct_processus *s_etat_proc Line 6128  evaluation(struct_processus *s_etat_proc
                                                         .niveau_courant--;                                                          .niveau_courant--;
   
                                                     if (                                                      if (
                                                     retrait_variable_par_niveau(                                                  retrait_variables_par_niveau(
                                                     s_etat_processus) ==                                                  s_etat_processus) == d_erreur)
                                                     d_erreur)  
                                                     {                                                      {
                                                         if (presence_egalite ==                                                          if (presence_egalite ==
                                                                 d_vrai)                                                                  d_vrai)
Line 6250  evaluation(struct_processus *s_etat_proc Line 6238  evaluation(struct_processus *s_etat_proc
                                     registre_mode_execution_programme;                                      registre_mode_execution_programme;
                             (*s_etat_processus).instruction_courante =                              (*s_etat_processus).instruction_courante =
                                     instruction_courante;                                      instruction_courante;
   
                             if (presence_egalite == d_vrai)                              if (presence_egalite == d_vrai)
                             {                              {
                                 liberation(s_etat_processus, s_objet_evalue);                                  liberation(s_etat_processus, s_objet_evalue);
Line 6341  evaluation(struct_processus *s_etat_proc Line 6328  evaluation(struct_processus *s_etat_proc
                             {                              {
                                 // Variable partagée                                  // Variable partagée
   
                                 if (pthread_mutex_lock(&((*(*s_etat_processus)  
                                         .s_liste_variables_partagees).mutex))  
                                         != 0)  
                                 {  
                                     (*s_etat_processus).erreur_systeme =  
                                             d_es_processus;  
                                     return(d_erreur);  
                                 }  
   
                                 presence_variable_partagee = d_faux;                                  presence_variable_partagee = d_faux;
   
                                 if (recherche_variable_partagee(                                  if (recherche_variable_partagee(
Line 6357  evaluation(struct_processus *s_etat_proc Line 6335  evaluation(struct_processus *s_etat_proc
                                         .pointeur_variable_courante).nom,                                          .pointeur_variable_courante).nom,
                                         (*(*s_etat_processus)                                          (*(*s_etat_processus)
                                         .pointeur_variable_courante)                                          .pointeur_variable_courante)
                                         .variable_partagee, 'E') == d_vrai)                                          .variable_partagee, 'E') != NULL)
                                 {                                  {
                                     presence_variable = d_vrai;                                      presence_variable = d_vrai;
                                     presence_variable_partagee = d_vrai;                                      presence_variable_partagee = d_vrai;
   
                                     if ((*((*(*s_etat_processus)                                      if ((*(*(*s_etat_processus)
                                             .s_liste_variables_partagees).table                                              .pointeur_variable_partagee_courante
                                             [(*(*s_etat_processus)                                              ).objet).type == ADR)
                                             .s_liste_variables_partagees)  
                                             .position_variable].objet)).type  
                                             == ADR)  
                                     {                                      {
                                         presence_fonction = d_vrai;                                          presence_fonction = d_vrai;
                                     }                                      }
Line 6378  evaluation(struct_processus *s_etat_proc Line 6353  evaluation(struct_processus *s_etat_proc
                                             .objet)).symbole == d_faux))                                              .objet)).symbole == d_faux))
                                     {                                      {
                                         if ((s_copie_variable_partagee =                                          if ((s_copie_variable_partagee =
                                                 copie_objet(s_etat_processus,                                              copie_objet(s_etat_processus,
                                                 (*(*s_etat_processus)                                              (*(*s_etat_processus)
                                                 .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                                 .table[(*(*s_etat_processus)                                              ).objet, 'P')) == NULL)
                                                 .s_liste_variables_partagees)  
                                                 .position_variable].objet, 'P'))  
                                                 == NULL)  
                                         {                                          {
                                             if (pthread_mutex_unlock(                                              if (pthread_mutex_unlock(
                                                     &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                                     .s_liste_variables_partagees                                              .pointeur_variable_partagee_courante
                                                     ).mutex)) != 0)                                              ).mutex)) != 0)
                                             {                                              {
                                                 (*s_etat_processus)                                                  (*s_etat_processus)
                                                         .erreur_systeme =                                                          .erreur_systeme =
Line 6405  evaluation(struct_processus *s_etat_proc Line 6377  evaluation(struct_processus *s_etat_proc
   
                                     if (pthread_mutex_unlock(                                      if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                      {
                                         (*s_etat_processus).erreur_systeme =                                          (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                  d_es_processus;
Line 6418  evaluation(struct_processus *s_etat_proc Line 6390  evaluation(struct_processus *s_etat_proc
                                     (*s_etat_processus).erreur_systeme = d_es;                                      (*s_etat_processus).erreur_systeme = d_es;
                                     presence_variable = d_faux;                                      presence_variable = d_faux;
                                     presence_variable_partagee = d_faux;                                      presence_variable_partagee = d_faux;
   
                                     if (pthread_mutex_unlock(  
                                             &((*(*s_etat_processus)  
                                             .s_liste_variables_partagees)  
                                             .mutex)) != 0)  
                                     {  
                                         (*s_etat_processus).erreur_systeme =  
                                                 d_es_processus;  
                                         return(d_erreur);  
                                     }  
                                 }                                  }
                             }                              }
                             else                              else
Line 6578  evaluation(struct_processus *s_etat_proc Line 6540  evaluation(struct_processus *s_etat_proc
                             }                              }
   
                             (*s_etat_processus).evaluation_forcee =                              (*s_etat_processus).evaluation_forcee =
                                 registre_evaluation_forcee;                                      registre_evaluation_forcee;
                             (*s_etat_processus).instruction_courante =                              (*s_etat_processus).instruction_courante =
                                     instruction_courante;                                      instruction_courante;
                             (*s_etat_processus).mode_execution_programme = 'N';                              (*s_etat_processus).mode_execution_programme = 'N';
Line 6713  evaluation(struct_processus *s_etat_proc Line 6675  evaluation(struct_processus *s_etat_proc
                                     }                                      }
                                 }                                  }
   
                                 registre_niveau_courant = (*(*s_etat_processus)                                  empilement_pile_systeme(s_etat_processus);
                                         .l_base_pile_systeme).niveau_courant;  
                                 registre_retour_definition =  
                                         (*(*s_etat_processus)  
                                         .l_base_pile_systeme).retour_definition;  
   
                                 (*(*s_etat_processus).l_base_pile_systeme)                                  (*(*s_etat_processus).l_base_pile_systeme)
                                         .retour_definition = 'Y';                                          .retour_definition = 'Y';
                                 (*(*s_etat_processus).l_base_pile_systeme)                                  (*(*s_etat_processus).l_base_pile_systeme)
                                         .niveau_courant = (*s_etat_processus)                                          .niveau_courant = (*s_etat_processus)
                                         .niveau_courant;                                          .niveau_courant;
                                 empilement_pile_systeme(s_etat_processus);                                  (*(*s_etat_processus).l_base_pile_systeme)
                                           .pointeur_objet_retour =
                                           l_element_courant;
                                   (*(*s_etat_processus).l_base_pile_systeme)
                                           .origine_routine_evaluation = 'Y';
   
                                 if (evaluation(s_etat_processus,                                  if (evaluation(s_etat_processus,
                                         (*(*s_etat_processus)                                          (*(*s_etat_processus)
Line 6733  evaluation(struct_processus *s_etat_proc Line 6695  evaluation(struct_processus *s_etat_proc
                                 {                                  {
                                     depilement_pile_systeme(s_etat_processus);                                      depilement_pile_systeme(s_etat_processus);
   
                                     (*(*s_etat_processus).l_base_pile_systeme)  
                                             .niveau_courant =  
                                             registre_niveau_courant;  
                                     (*(*s_etat_processus).l_base_pile_systeme)  
                                             .retour_definition =  
                                             registre_retour_definition;  
   
                                     if ((*s_etat_processus).profilage == d_vrai)                                      if ((*s_etat_processus).profilage == d_vrai)
                                     {                                      {
                                         profilage(s_etat_processus, NULL);                                          profilage(s_etat_processus, NULL);
Line 6763  evaluation(struct_processus *s_etat_proc Line 6718  evaluation(struct_processus *s_etat_proc
                                 }                                  }
   
                                 depilement_pile_systeme(s_etat_processus);                                  depilement_pile_systeme(s_etat_processus);
   
                                 (*(*s_etat_processus).l_base_pile_systeme)  
                                         .niveau_courant =  
                                         registre_niveau_courant;  
                                 (*(*s_etat_processus).l_base_pile_systeme)  
                                         .retour_definition =  
                                         registre_retour_definition;  
                             }                              }
                             else                              else
                             {                              {
Line 6887  evaluation(struct_processus *s_etat_proc Line 6835  evaluation(struct_processus *s_etat_proc
                                 {                                  {
                                     // Variable partagée                                      // Variable partagée
   
                                     if (pthread_mutex_lock(  
                                             &((*(*s_etat_processus)  
                                             .s_liste_variables_partagees)  
                                             .mutex)) != 0)  
                                     {  
                                         (*s_etat_processus).erreur_systeme =  
                                                 d_es_processus;  
                                         return(d_erreur);  
                                     }  
   
                                     if (recherche_variable_partagee(                                      if (recherche_variable_partagee(
                                             s_etat_processus,                                              s_etat_processus,
                                             (*(*s_etat_processus)                                              (*(*s_etat_processus)
                                             .pointeur_variable_courante).nom,                                              .pointeur_variable_courante).nom,
                                             (*(*s_etat_processus)                                              (*(*s_etat_processus)
                                             .pointeur_variable_courante)                                              .pointeur_variable_courante)
                                             .variable_partagee, 'E') == d_vrai)                                              .variable_partagee, 'E') != NULL)
                                     {                                      {
                                         liberation(s_etat_processus,                                          liberation(s_etat_processus,
                                                 s_objet_elementaire);                                                  s_objet_elementaire);
   
                                         if ((s_objet_elementaire =                                          if ((s_objet_elementaire =
                                                 copie_objet(s_etat_processus,                                              copie_objet(s_etat_processus,
                                                 (*(*s_etat_processus)                                              (*(*s_etat_processus)
                                                 .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                                 .table[(*(*s_etat_processus)                                              ).objet, 'P')) == NULL)
                                                 .s_liste_variables_partagees)  
                                                 .position_variable].objet,  
                                                 'P')) == NULL)  
                                         {                                          {
                                             if (pthread_mutex_unlock(                                              if (pthread_mutex_unlock(
                                                     &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                                     .s_liste_variables_partagees                                              .pointeur_variable_partagee_courante
                                                     ).mutex)) != 0)                                              ).mutex)) != 0)
                                             {                                              {
                                                 (*s_etat_processus)                                                  (*s_etat_processus)
                                                         .erreur_systeme =                                                          .erreur_systeme =
Line 6941  evaluation(struct_processus *s_etat_proc Line 6876  evaluation(struct_processus *s_etat_proc
                                                     instruction_courante;                                                      instruction_courante;
                                             return(d_erreur);                                              return(d_erreur);
                                         }                                          }
                                     }  
   
                                     if (pthread_mutex_unlock(                                          if (pthread_mutex_unlock(
                                             &((*(*s_etat_processus)                                              &((*(*s_etat_processus)
                                             .s_liste_variables_partagees)                                              .pointeur_variable_partagee_courante
                                             .mutex)) != 0)                                              ).mutex)) != 0)
                                     {                                          {
                                         (*s_etat_processus).erreur_systeme =                                              (*s_etat_processus).erreur_systeme =
                                                 d_es_processus;                                                      d_es_processus;
                                         return(d_erreur);                                              return(d_erreur);
                                           }
                                     }                                      }
                                 }                                  }
                                 else                                  else
Line 7143  evaluation(struct_processus *s_etat_proc Line 7078  evaluation(struct_processus *s_etat_proc
   
             (*s_etat_processus).niveau_courant = niveau_initial;              (*s_etat_processus).niveau_courant = niveau_initial;
   
             if (retrait_variable_par_niveau(s_etat_processus) == d_erreur)              if (retrait_variables_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;
                   (*s_etat_processus).mode_execution_programme =
                           registre_mode_execution_programme;
                 return(d_erreur);                  return(d_erreur);
             }              }
         }          }
Line 7153  evaluation(struct_processus *s_etat_proc Line 7097  evaluation(struct_processus *s_etat_proc
          * Retrait des variables statiques créées dans l'expression           * Retrait des variables statiques créées dans l'expression
          */           */
   
         for(n = 0; n < (*s_etat_processus).nombre_variables_statiques; n++)          if (retrait_variables_statiques_locales(s_etat_processus) == d_erreur)
         {          {
             if ((*s_etat_processus).s_liste_variables_statiques[n]              if (presence_egalite == d_vrai)
                     .niveau > (*s_etat_processus).niveau_courant)  
             {              {
                 if (retrait_variable_statique(s_etat_processus,                  liberation(s_etat_processus, s_objet_evalue);
                         (*s_etat_processus).s_liste_variables_statiques[n].nom,  
                         (*s_etat_processus).s_liste_variables_statiques[n]  
                         .variable_statique) == d_erreur)  
                 {  
                     if (presence_egalite == d_vrai)  
                     {  
                         liberation(s_etat_processus, s_objet_evalue);  
                     }  
   
                     (*s_etat_processus).instruction_courante =  
                             instruction_courante;  
                     (*s_etat_processus).mode_execution_programme =  
                             registre_mode_execution_programme;  
                     return(d_erreur);  
                 }  
             }              }
   
               (*s_etat_processus).instruction_courante =
                       instruction_courante;
               (*s_etat_processus).mode_execution_programme =
                       registre_mode_execution_programme;
               return(d_erreur);
         }          }
   
         /*          /*
          * Retrait des variables partagées créées dans l'expression           * Retrait des variables partagées créées dans l'expression
          */           */
   
         if (pthread_mutex_lock(&((*(*s_etat_processus)          if (retrait_variables_partagees_locales(s_etat_processus) == d_erreur)
                 .s_liste_variables_partagees).mutex)) != 0)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
             return(d_erreur);  
         }  
   
         for(n = 0; n < (*(*s_etat_processus).s_liste_variables_partagees)  
                 .nombre_variables; n++)  
         {          {
             if ((*(*s_etat_processus).s_liste_variables_partagees).table[n]              if (presence_egalite == d_vrai)
                     .niveau > (*s_etat_processus).niveau_courant)  
             {              {
                 if (retrait_variable_partagee(s_etat_processus,                  liberation(s_etat_processus, s_objet_evalue);
                         (*(*s_etat_processus).s_liste_variables_partagees)  
                         .table[n].nom, (*(*s_etat_processus)  
                         .s_liste_variables_partagees).table[n]  
                         .variable_partagee) == d_erreur)  
                 {  
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                             .s_liste_variables_partagees).mutex)) != 0)  
                     {  
                         (*s_etat_processus).erreur_systeme = d_es_processus;  
                         return(d_erreur);  
                     }  
   
                     if (presence_egalite == d_vrai)  
                     {  
                         liberation(s_etat_processus, s_objet_evalue);  
                     }  
   
                     (*s_etat_processus).instruction_courante =  
                             instruction_courante;  
                     (*s_etat_processus).mode_execution_programme =  
                             registre_mode_execution_programme;  
                     return(d_erreur);  
                 }  
             }              }
         }  
   
         if (pthread_mutex_unlock(&((*(*s_etat_processus)              (*s_etat_processus).instruction_courante =
                 .s_liste_variables_partagees).mutex)) != 0)                      instruction_courante;
         {              (*s_etat_processus).mode_execution_programme =
             (*s_etat_processus).erreur_systeme = d_es_processus;                      registre_mode_execution_programme;
             return(d_erreur);              return(d_erreur);
         }          }
   

Removed from v.1.57  
changed lines
  Added in v.1.72


CVSweb interface <joel.bertrand@systella.fr>