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

version 1.57, 2012/09/29 17:53:02 version 1.60, 2012/10/04 15:21:25
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.10    RPL/2 (R) version 4.1.11
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 585  evaluation(struct_processus *s_etat_proc Line 585  evaluation(struct_processus *s_etat_proc
     }      }
     else if (((*s_objet).type == RPN) || ((*s_objet).type == ALG))      else if (((*s_objet).type == RPN) || ((*s_objet).type == ALG))
     {      {
           // Ajout d'un bouchon à la liste des variables statiques pour
           // savoir quelles sont les variables statiques qui ont été créées
           // par l'évaluation de l'expression et qui sont susceptibles
           // de devoir être éliminées.
   
           if (ajout_bouchon_variable_statique(s_etat_processus) == d_erreur)
           {
               (*s_etat_processus).instruction_courante = instruction_courante;
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return(d_erreur);
           }
   
         l_element_courant = (struct_liste_chainee *) (*s_objet).objet;          l_element_courant = (struct_liste_chainee *) (*s_objet).objet;
         l_element_egalite = NULL;          l_element_egalite = NULL;
         presence_egalite = d_faux;          presence_egalite = d_faux;
Line 956  evaluation(struct_processus *s_etat_proc Line 968  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 1070  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 1159  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 1347  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 1436  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 1525  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 1724  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 1821  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 1910  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 3937  evaluation(struct_processus *s_etat_proc Line 3958  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 4060  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 4149  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 4378  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 4467  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 4556  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 4751  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 4840  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 4929  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 5208  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 5310  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 5399  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 5628  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 5717  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 5806  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 6001  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 6090  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 6179  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 7143  evaluation(struct_processus *s_etat_proc Line 7182  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 7201  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(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);
         }          }
   
         /*          /*

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


CVSweb interface <joel.bertrand@systella.fr>