Diff for /rpl/src/evaluation.c between versions 1.106 and 1.107

version 1.106, 2017/07/17 21:38:07 version 1.107, 2017/07/30 21:59:41
Line 31 Line 31
 ================================================================================  ================================================================================
   Evaluation d'une expression    Evaluation d'une expression
 ================================================================================  ================================================================================
   Entrées :    Entrées :
     structure processus,      structure processus,
     objet à évaluer (non libéré au retour de la routine)      objet à évaluer (non libéré au retour de la routine)
     et type ('E' pour 'EVAL', 'I' pour interactif et 'N' pour '->NUM')      et type ('E' pour 'EVAL', 'I' pour interactif et 'N' pour '->NUM')
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Sorties : objet évalué au niveau 1 de la pile    Sorties : objet évalué au niveau 1 de la pile
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Effets de bord : néant    Effets de bord : néant
 ================================================================================  ================================================================================
 */  */
   
Line 176  evaluation(struct_processus *s_etat_proc Line 176  evaluation(struct_processus *s_etat_proc
                     if ((*(*s_etat_processus).pointeur_variable_courante)                      if ((*(*s_etat_processus).pointeur_variable_courante)
                             .objet == NULL)                              .objet == NULL)
                     {                      {
                         // Variable partagée                          // Variable partagée
   
                         presence_variable_partagee = d_faux;                          presence_variable_partagee = d_faux;
   
Line 236  evaluation(struct_processus *s_etat_proc Line 236  evaluation(struct_processus *s_etat_proc
                     }                      }
                     else                      else
                     {                      {
                         // Variable privée                          // Variable privée
   
                         presence_variable = d_vrai;                          presence_variable = d_vrai;
   
Line 571  evaluation(struct_processus *s_etat_proc Line 571  evaluation(struct_processus *s_etat_proc
   
         if (presence_egalite == d_vrai)          if (presence_egalite == d_vrai)
         {          {
             // S'il y a un signe '=', on modifie l'expression à évaluer en ôtant              // S'il y a un signe '=', on modifie l'expression à évaluer en ôtant
             // le signe '=' et en le remplaçant d'une part par SWAP DROP              // le signe '=' et en le remplaçant d'une part par SWAP DROP
             // et d'autre part par DROP. On évalue la première puis la              // et d'autre part par DROP. On évalue la première puis la
             // seconde normalement avant de reconstituer le tout à la fin              // seconde normalement avant de reconstituer le tout à la fin
             // de la routine.              // de la routine.
   
             l_registre_pile_operationnelle = NULL;              l_registre_pile_operationnelle = NULL;
Line 633  evaluation(struct_processus *s_etat_proc Line 633  evaluation(struct_processus *s_etat_proc
                 return(d_erreur);                  return(d_erreur);
             }              }
   
             // Récupération de l'objet au niveau 1 résultat de l'évaluation              // Récupération de l'objet au niveau 1 résultat de l'évaluation
             // du premier membre de l'équation puis destruction de la pile.              // du premier membre de l'équation puis destruction de la pile.
   
             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),              if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                     &s_objet_evalue) == d_erreur)                      &s_objet_evalue) == d_erreur)
Line 646  evaluation(struct_processus *s_etat_proc Line 646  evaluation(struct_processus *s_etat_proc
   
             instruction_clear(s_etat_processus);              instruction_clear(s_etat_processus);
   
             // Régénération de la pile initiale              // Régénération de la pile initiale
   
             while(depilement(s_etat_processus, &l_registre_pile_operationnelle,              while(depilement(s_etat_processus, &l_registre_pile_operationnelle,
                     &s_sous_objet) != d_erreur)                      &s_sous_objet) != d_erreur)
Line 710  evaluation(struct_processus *s_etat_proc Line 710  evaluation(struct_processus *s_etat_proc
         }          }
   
         /*          /*
          * Exécution de la séquence d'instructions           * Exécution de la séquence d'instructions
          */           */
   
         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;          l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
Line 731  evaluation(struct_processus *s_etat_proc Line 731  evaluation(struct_processus *s_etat_proc
             if ((*(*l_element_courant).donnee).type == FCT)              if ((*(*l_element_courant).donnee).type == FCT)
             {              {
                 /*                  /*
                  * Tester la cohérence avec une variable pour récupérer les                   * Tester la cohérence avec une variable pour récupérer les
                  * données selon les indices passés en argument (tableaux,                   * données selon les indices passés en argument (tableaux,
                  * listes...).                   * listes...).
                  */                   */
   
Line 867  evaluation(struct_processus *s_etat_proc Line 867  evaluation(struct_processus *s_etat_proc
                                                 .objet)).fonction;                                                  .objet)).fonction;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 1016  evaluation(struct_processus *s_etat_proc Line 1016  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 1133  evaluation(struct_processus *s_etat_proc Line 1133  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour                                                  // Traitement spécifique pour
                                                 // la fin d'une section                                                  // la fin d'une section
                                                 // critique                                                  // critique
   
Line 1259  evaluation(struct_processus *s_etat_proc Line 1259  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 1382  evaluation(struct_processus *s_etat_proc Line 1382  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 1499  evaluation(struct_processus *s_etat_proc Line 1499  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour                                                  // Traitement spécifique pour
                                                 // la fin d'une section                                                  // la fin d'une section
                                                 // critique                                                  // critique
   
Line 1598  evaluation(struct_processus *s_etat_proc Line 1598  evaluation(struct_processus *s_etat_proc
                         }                          }
                         else                          else
                         {                          {
                             // On ne détruit pas les variables pour les inclure                              // On ne détruit pas les variables pour les inclure
                             // dans le fichier rpl-core.                              // dans le fichier rpl-core.
   
                             (*s_etat_processus).gel_liste_variables = d_vrai;                              (*s_etat_processus).gel_liste_variables = d_vrai;
Line 1636  evaluation(struct_processus *s_etat_proc Line 1636  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 1767  evaluation(struct_processus *s_etat_proc Line 1767  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 1884  evaluation(struct_processus *s_etat_proc Line 1884  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour                                                  // Traitement spécifique pour
                                                 // la fin d'une section critique                                                  // la fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 2007  evaluation(struct_processus *s_etat_proc Line 2007  evaluation(struct_processus *s_etat_proc
                     else                      else
                     {                      {
                         /*                          /*
                          * Régénération de la fonction en notation algébrique                           * Régénération de la fonction en notation algébrique
                          */                           */
   
                         if ((s_objet_elementaire = (struct_objet *)                          if ((s_objet_elementaire = (struct_objet *)
Line 2193  evaluation(struct_processus *s_etat_proc Line 2193  evaluation(struct_processus *s_etat_proc
                         }                          }
   
                         /*                          /*
                          * Clôture de l'expression                           * Clôture de l'expression
                          */                           */
   
                         if (((*l_element_fonction).suivant =                          if (((*l_element_fonction).suivant =
Line 2302  evaluation(struct_processus *s_etat_proc Line 2302  evaluation(struct_processus *s_etat_proc
                                 .pointeur_variable_courante).variable_partagee,                                  .pointeur_variable_courante).variable_partagee,
                                 'E') != NULL)                                  'E') != NULL)
                         {                          {
                             // Une variable partagée existe.                              // Une variable partagée existe.
   
                             presence_variable_partagee = d_vrai;                              presence_variable_partagee = d_vrai;
   
Line 2322  evaluation(struct_processus *s_etat_proc Line 2322  evaluation(struct_processus *s_etat_proc
                     }                      }
   
                     /*                      /*
                      * Recherche d'un élément dans un vecteur                       * Recherche d'un élément dans un vecteur
                      */                       */
   
                     if ((*(*s_etat_processus).pointeur_variable_courante)                      if ((*(*s_etat_processus).pointeur_variable_courante)
                             .objet == NULL)                              .objet == NULL)
                     {                      {
                         // La variable partagée n'existe plus.                          // La variable partagée n'existe plus.
   
                         free(s_objet_elementaire);                          free(s_objet_elementaire);
   
Line 2612  evaluation(struct_processus *s_etat_proc Line 2612  evaluation(struct_processus *s_etat_proc
                     }                      }
   
                     /*                      /*
                      * Recherche d'un élément dans une matrice                       * Recherche d'un élément dans une matrice
                      */                       */
   
                     else if ((((*((*(*s_etat_processus)                      else if ((((*((*(*s_etat_processus)
Line 2920  evaluation(struct_processus *s_etat_proc Line 2920  evaluation(struct_processus *s_etat_proc
                     }                      }
   
                     /*                      /*
                      * Recherche de l'élément idoine dans la liste                       * Recherche de l'élément idoine dans la liste
                      */                       */
   
                     else if (((*((*(*s_etat_processus)                      else if (((*((*(*s_etat_processus)
Line 3085  evaluation(struct_processus *s_etat_proc Line 3085  evaluation(struct_processus *s_etat_proc
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                         // Si l'objet élémentaire est un nom et que ce nom n'est                          // Si l'objet élémentaire est un nom et que ce nom n'est
                         // pas un nom symbolique, il convient de l'évaluer.                          // pas un nom symbolique, il convient de l'évaluer.
   
                         if ((*s_objet_elementaire).type == NOM)                          if ((*s_objet_elementaire).type == NOM)
                         {                          {
Line 3167  evaluation(struct_processus *s_etat_proc Line 3167  evaluation(struct_processus *s_etat_proc
                     }                      }
   
                     /*                      /*
                      * Recherche de l'élément idoine dans la table                       * Recherche de l'élément idoine dans la table
                      */                       */
   
                     else if (((*((*(*s_etat_processus)                      else if (((*((*(*s_etat_processus)
Line 3322  evaluation(struct_processus *s_etat_proc Line 3322  evaluation(struct_processus *s_etat_proc
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                         // Si l'objet élémentaire est un nom et que ce nom n'est                          // Si l'objet élémentaire est un nom et que ce nom n'est
                         // pas un nom symbolique, il convient de l'évaluer.                          // pas un nom symbolique, il convient de l'évaluer.
   
                         if ((*s_objet_elementaire).type == NOM)                          if ((*s_objet_elementaire).type == NOM)
                         {                          {
Line 4009  evaluation(struct_processus *s_etat_proc Line 4009  evaluation(struct_processus *s_etat_proc
                                                 .objet)).fonction;                                                  .objet)).fonction;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 4158  evaluation(struct_processus *s_etat_proc Line 4158  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 4275  evaluation(struct_processus *s_etat_proc Line 4275  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 4441  evaluation(struct_processus *s_etat_proc Line 4441  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 4564  evaluation(struct_processus *s_etat_proc Line 4564  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 4681  evaluation(struct_processus *s_etat_proc Line 4681  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 4776  evaluation(struct_processus *s_etat_proc Line 4776  evaluation(struct_processus *s_etat_proc
                         }                          }
                         else                          else
                         {                          {
                             // On ne détruit pas les variables pour les inclure                              // On ne détruit pas les variables pour les inclure
                             // dans le fichier rpl-core.                              // dans le fichier rpl-core.
   
                             (*s_etat_processus).gel_liste_variables = d_vrai;                              (*s_etat_processus).gel_liste_variables = d_vrai;
Line 4814  evaluation(struct_processus *s_etat_proc Line 4814  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 4937  evaluation(struct_processus *s_etat_proc Line 4937  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 5054  evaluation(struct_processus *s_etat_proc Line 5054  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 5262  evaluation(struct_processus *s_etat_proc Line 5262  evaluation(struct_processus *s_etat_proc
                                                 .objet)).fonction;                                                  .objet)).fonction;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 5411  evaluation(struct_processus *s_etat_proc Line 5411  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 5528  evaluation(struct_processus *s_etat_proc Line 5528  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 5622  evaluation(struct_processus *s_etat_proc Line 5622  evaluation(struct_processus *s_etat_proc
                                 {                                  {
                                     /*                                      /*
                                      * La fin de l'expression est atteinte,                                       * La fin de l'expression est atteinte,
                                      * le séquenceur reprend la main.                                       * le séquenceur reprend la main.
                                      */                                       */
   
                                     if (presence_egalite == d_vrai)                                      if (presence_egalite == d_vrai)
Line 5694  evaluation(struct_processus *s_etat_proc Line 5694  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 5817  evaluation(struct_processus *s_etat_proc Line 5817  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 5934  evaluation(struct_processus *s_etat_proc Line 5934  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 6029  evaluation(struct_processus *s_etat_proc Line 6029  evaluation(struct_processus *s_etat_proc
                         }                          }
                         else                          else
                         {                          {
                             // On ne détruit pas les variables pour les inclure                              // On ne détruit pas les variables pour les inclure
                             // dans le fichier rpl-core.                              // dans le fichier rpl-core.
   
                             (*s_etat_processus).gel_liste_variables = d_vrai;                              (*s_etat_processus).gel_liste_variables = d_vrai;
Line 6067  evaluation(struct_processus *s_etat_proc Line 6067  evaluation(struct_processus *s_etat_proc
                                                 = d_es;                                                  = d_es;
   
                                         /*                                          /*
                                          * Traitement de la pile système par les                                           * Traitement de la pile système par les
                                          * différentes instructions.                                           * différentes instructions.
                                          */                                           */
   
                                         if (TEST(instruction_if) ||                                          if (TEST(instruction_if) ||
Line 6190  evaluation(struct_processus *s_etat_proc Line 6190  evaluation(struct_processus *s_etat_proc
                                                     .type_cloture != 'L'))                                                      .type_cloture != 'L'))
                                             {                                              {
                                                 /*                                                  /*
                                                  * Libération des compteurs                                                   * Libération des compteurs
                                                  * de boucle                                                   * de boucle
                                                  */                                                   */
   
Line 6307  evaluation(struct_processus *s_etat_proc Line 6307  evaluation(struct_processus *s_etat_proc
                                             }                                              }
                                             else                                              else
                                             {                                              {
                                                 // Traitement spécifique pour la                                                  // Traitement spécifique pour la
                                                 // fin d'une section critique                                                  // fin d'une section critique
   
                                                 if ((*s_etat_processus)                                                  if ((*s_etat_processus)
Line 6483  evaluation(struct_processus *s_etat_proc Line 6483  evaluation(struct_processus *s_etat_proc
                             if ((*(*s_etat_processus)                              if ((*(*s_etat_processus)
                                     .pointeur_variable_courante).objet == NULL)                                      .pointeur_variable_courante).objet == NULL)
                             {                              {
                                 // Variable partagée                                  // Variable partagée
   
                                 presence_variable_partagee = d_faux;                                  presence_variable_partagee = d_faux;
   
Line 6574  evaluation(struct_processus *s_etat_proc Line 6574  evaluation(struct_processus *s_etat_proc
                         if ((*((struct_nom *) (*(*l_element_courant).donnee)                          if ((*((struct_nom *) (*(*l_element_courant).donnee)
                                 .objet)).symbole == d_vrai)                                  .objet)).symbole == d_vrai)
                         {                          {
                             // L'objet apparaît comme un symbole dans                              // L'objet apparaît comme un symbole dans
                             // l'expression en cours d'évaluation. On se                              // l'expression en cours d'évaluation. On se
                             // contente de l'empiler.                              // contente de l'empiler.
   
                             if ((s_sous_objet = copie_objet(s_etat_processus,                              if ((s_sous_objet = copie_objet(s_etat_processus,
Line 6887  evaluation(struct_processus *s_etat_proc Line 6887  evaluation(struct_processus *s_etat_proc
                                     // Reprise sur erreur.                                      // Reprise sur erreur.
   
 //==============================================================================  //==============================================================================
 //  Réindentation  //  Réindentation
 //==============================================================================  //==============================================================================
   
             drapeau_then = d_faux;              drapeau_then = d_faux;
Line 6930  evaluation(struct_processus *s_etat_proc Line 6930  evaluation(struct_processus *s_etat_proc
                                 .objet)).fonction;                                  .objet)).fonction;
   
                         /*                          /*
                          * Traitement de la pile système par les                           * Traitement de la pile système par les
                          * différentes instructions.                           * différentes instructions.
                          */                           */
   
                         if (TEST(instruction_if) ||                          if (TEST(instruction_if) ||
Line 7054  evaluation(struct_processus *s_etat_proc Line 7054  evaluation(struct_processus *s_etat_proc
                                     .type_cloture != 'L'))                                      .type_cloture != 'L'))
                             {                              {
                                 /*                                  /*
                                  * Libération des compteurs                                   * Libération des compteurs
                                  * de boucle                                   * de boucle
                                  */                                   */
   
Line 7146  evaluation(struct_processus *s_etat_proc Line 7146  evaluation(struct_processus *s_etat_proc
                             }                              }
                             else                              else
                             {                              {
                                 // Traitement spécifique pour                                  // Traitement spécifique pour
                                 // la fin d'une section                                  // la fin d'une section
                                 // critique                                  // critique
   
Line 7227  evaluation(struct_processus *s_etat_proc Line 7227  evaluation(struct_processus *s_etat_proc
             (*s_etat_processus).erreur_execution = d_ex;              (*s_etat_processus).erreur_execution = d_ex;
   
 //==============================================================================  //==============================================================================
 //  Fin de la réindentation  //  Fin de la réindentation
 //==============================================================================  //==============================================================================
                                 }                                  }
                             }                              }
Line 7325  evaluation(struct_processus *s_etat_proc Line 7325  evaluation(struct_processus *s_etat_proc
                         }                          }
   
                         /*                          /*
                          * Vérification du drapeau symbole pour                           * Vérification du drapeau symbole pour
                          * savoir si l'on met dans la pile le nom                           * savoir si l'on met dans la pile le nom
                          * ou le contenu de la variable.                           * ou le contenu de la variable.
                          */                           */
Line 7342  evaluation(struct_processus *s_etat_proc Line 7342  evaluation(struct_processus *s_etat_proc
                                         .pointeur_variable_courante).objet                                          .pointeur_variable_courante).objet
                                         == NULL)                                          == NULL)
                                 {                                  {
                                     // Variable partagée                                      // Variable partagée
   
                                     if (recherche_variable_partagee(                                      if (recherche_variable_partagee(
                                             s_etat_processus,                                              s_etat_processus,
Line 7399  evaluation(struct_processus *s_etat_proc Line 7399  evaluation(struct_processus *s_etat_proc
                                 }                                  }
                                 else                                  else
                                 {                                  {
                                     // Variable privée                                      // Variable privée
   
                                     liberation(s_etat_processus,                                      liberation(s_etat_processus,
                                             s_objet_elementaire);                                              s_objet_elementaire);
Line 7483  evaluation(struct_processus *s_etat_proc Line 7483  evaluation(struct_processus *s_etat_proc
                             ((*s_etat_processus).erreur_execution != d_ex) ||                              ((*s_etat_processus).erreur_execution != d_ex) ||
                             ((*s_etat_processus).exception != d_ep))                              ((*s_etat_processus).exception != d_ep))
                     {                      {
                         // Il est anormal de récupérer ici une erreur                          // Il est anormal de récupérer ici une erreur
                         // d'exécution puisqu'on empile une constante                          // d'exécution puisqu'on empile une constante
                         // symbolique.                          // symbolique.
   
                         if (presence_egalite == d_vrai)                          if (presence_egalite == d_vrai)
Line 7581  evaluation(struct_processus *s_etat_proc Line 7581  evaluation(struct_processus *s_etat_proc
         if (niveau_initial < (*s_etat_processus).niveau_courant)          if (niveau_initial < (*s_etat_processus).niveau_courant)
         {          {
             /*              /*
              * Retrait des variables dans le cas où l'évaluation de               * Retrait des variables dans le cas où l'évaluation de
              * l'expression a été interrompue               * l'expression a été interrompue
              */               */
   
             (*s_etat_processus).niveau_courant = niveau_initial;              (*s_etat_processus).niveau_courant = niveau_initial;
Line 7603  evaluation(struct_processus *s_etat_proc Line 7603  evaluation(struct_processus *s_etat_proc
         }          }
   
         /*          /*
          * Retrait des variables statiques créées dans l'expression           * Retrait des variables statiques créées dans l'expression
          */           */
   
         if (retrait_variables_statiques_locales(s_etat_processus) == d_erreur)          if (retrait_variables_statiques_locales(s_etat_processus) == d_erreur)
Line 7621  evaluation(struct_processus *s_etat_proc Line 7621  evaluation(struct_processus *s_etat_proc
         }          }
   
         /*          /*
          * Retrait des variables partagées créées dans l'expression           * Retrait des variables partagées créées dans l'expression
          */           */
   
         if (retrait_variables_partagees_locales(s_etat_processus) == d_erreur)          if (retrait_variables_partagees_locales(s_etat_processus) == d_erreur)
Line 7640  evaluation(struct_processus *s_etat_proc Line 7640  evaluation(struct_processus *s_etat_proc
   
         if ((*s_etat_processus).var_volatile_requete_arret != 0)          if ((*s_etat_processus).var_volatile_requete_arret != 0)
         {          {
             // Restauration de la pile système              // Restauration de la pile système
   
             while(pile_systeme_originelle !=              while(pile_systeme_originelle !=
                     (*s_etat_processus).l_base_pile_systeme)                      (*s_etat_processus).l_base_pile_systeme)
Line 7651  evaluation(struct_processus *s_etat_proc Line 7651  evaluation(struct_processus *s_etat_proc
   
         if (presence_egalite == d_vrai)          if (presence_egalite == d_vrai)
         {          {
             // Ajout du membre évalué lors de la première passe              // Ajout du membre évalué lors de la première passe
   
             if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),              if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                     s_objet_evalue) == d_erreur)                      s_objet_evalue) == d_erreur)

Removed from v.1.106  
changed lines
  Added in v.1.107


CVSweb interface <joel.bertrand@systella.fr>