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

version 1.57, 2012/09/29 17:53:02 version 1.62, 2012/10/08 11:53:46
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 802  evaluation(struct_processus *s_etat_proc Line 802  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 976  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 1078  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 1167  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 1355  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 1444  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 1533  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 1732  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 1829  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 1918  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 3966  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 4068  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 4157  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 4386  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 4475  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 4564  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 4759  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 4848  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 4937  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 5216  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 5318  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 5407  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 5636  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 5725  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 5814  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 6009  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 6098  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 6187  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 7190  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 7209  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);
         }          }
   
         /*          /*

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


CVSweb interface <joel.bertrand@systella.fr>