Diff for /rpl/src/evaluation.c between versions 1.3 and 1.12

version 1.3, 2010/01/29 16:49:23 version 1.12, 2010/04/20 12:49:18
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.10    RPL/2 (R) version 4.0.14
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 82  evaluation(struct_processus *s_etat_proc Line 82  evaluation(struct_processus *s_etat_proc
     unsigned char                   *instruction_courante;      unsigned char                   *instruction_courante;
     unsigned char                   *message;      unsigned char                   *message;
     unsigned char                   registre_evaluation_expression_compilee;      unsigned char                   registre_evaluation_expression_compilee;
       unsigned char                   registre_evaluation_forcee;
     unsigned char                   registre_instruction_valide;      unsigned char                   registre_instruction_valide;
     unsigned char                   registre_mode_execution_programme;      unsigned char                   registre_mode_execution_programme;
     unsigned char                   registre_retour_definition;      unsigned char                   registre_retour_definition;
Line 142  evaluation(struct_processus *s_etat_proc Line 143  evaluation(struct_processus *s_etat_proc
             if (recherche_variable(s_etat_processus, (*((struct_nom *)              if (recherche_variable(s_etat_processus, (*((struct_nom *)
                     (*s_objet_tampon).objet)).nom) == d_faux)                      (*s_objet_tampon).objet)).nom) == d_faux)
             {              {
                   (*s_etat_processus).erreur_execution = d_ex;
   
                   if ((*s_etat_processus).autorisation_nom_implicite == 'N')
                   {
                       if ((*((struct_nom *) (*s_objet_tampon).objet)).symbole ==
                               d_faux)
                       {
                           if (test_cfsf(s_etat_processus, 31) == d_vrai)
                           {
                               if (empilement_pile_last(s_etat_processus, 0)
                                       == d_erreur)
                               {
                                   return(d_erreur);
                               }
                           }
   
                           erreur_evaluation = d_erreur;
                           (*s_etat_processus).erreur_execution =
                                   d_ex_nom_implicite;
   
                           if (type_evaluation == 'I')
                           {
                               (*s_etat_processus).derniere_erreur_evaluation =
                                       (*s_etat_processus).erreur_execution;
                           }
                       }
                   }
   
                 (*s_etat_processus).erreur_systeme = d_es;                  (*s_etat_processus).erreur_systeme = d_es;
                 presence_variable = d_faux;                  presence_variable = d_faux;
             }              }
Line 327  evaluation(struct_processus *s_etat_proc Line 356  evaluation(struct_processus *s_etat_proc
                     }                      }
                 }                  }
   
                   registre_evaluation_forcee =
                           (*s_etat_processus).evaluation_forcee;
   
                   if (type_evaluation == 'N')
                   {
                       (*s_etat_processus).evaluation_forcee = 'Y';
                   }
   
                 if (sequenceur(s_etat_processus) == d_erreur)                  if (sequenceur(s_etat_processus) == d_erreur)
                 {                  {
                       (*s_etat_processus).evaluation_forcee =
                               registre_evaluation_forcee;
                     (*s_etat_processus).mode_execution_programme =                      (*s_etat_processus).mode_execution_programme =
                             registre_mode_execution_programme;                              registre_mode_execution_programme;
                     (*s_etat_processus).instruction_courante =                      (*s_etat_processus).instruction_courante =
Line 336  evaluation(struct_processus *s_etat_proc Line 375  evaluation(struct_processus *s_etat_proc
                     return(d_erreur);                      return(d_erreur);
                 }                  }
   
                   (*s_etat_processus).evaluation_forcee =
                           registre_evaluation_forcee;
                 (*s_etat_processus).instruction_courante =                  (*s_etat_processus).instruction_courante =
                         instruction_courante;                          instruction_courante;
                 (*s_etat_processus).mode_execution_programme = 'N';                  (*s_etat_processus).mode_execution_programme = 'N';
Line 450  evaluation(struct_processus *s_etat_proc Line 491  evaluation(struct_processus *s_etat_proc
                 (*s_etat_processus).evaluation_expression_compilee =                  (*s_etat_processus).evaluation_expression_compilee =
                         registre_evaluation_expression_compilee;                          registre_evaluation_expression_compilee;
             }              }
             else              else if ((*s_etat_processus).erreur_execution != d_ex_nom_implicite)
             {              {
                 if ((s_objet_tampon = copie_objet(s_etat_processus,                  if ((s_objet_tampon = copie_objet(s_etat_processus,
                         s_objet, 'P')) == NULL)                          s_objet, 'Q')) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 471  evaluation(struct_processus *s_etat_proc Line 512  evaluation(struct_processus *s_etat_proc
                             instruction_courante;                              instruction_courante;
                     return(d_erreur);                      return(d_erreur);
                 }                  }
   
                 if ((*s_etat_processus).erreur_execution ==  
                         d_ex_variable_non_definie)  
                 {  
                     (*s_etat_processus).erreur_execution = d_ex;  
                 }  
             }              }
         }          }
         else          else
Line 2846  evaluation(struct_processus *s_etat_proc Line 2881  evaluation(struct_processus *s_etat_proc
                             }                              }
                         }                          }
   
                           registre_evaluation_forcee =
                                   (*s_etat_processus).evaluation_forcee;
   
                           if (type_evaluation == 'N')
                           {
                               (*s_etat_processus).evaluation_forcee = 'Y';
                           }
   
                         if (sequenceur(s_etat_processus) == d_erreur)                          if (sequenceur(s_etat_processus) == d_erreur)
                         {                          {
                               (*s_etat_processus).evaluation_forcee =
                                       registre_evaluation_forcee;
   
                             if (presence_variable_partagee == d_vrai)                              if (presence_variable_partagee == d_vrai)
                             {                              {
                                 (*s_etat_processus).s_liste_variables                                  (*s_etat_processus).s_liste_variables
Line 2876  evaluation(struct_processus *s_etat_proc Line 2922  evaluation(struct_processus *s_etat_proc
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                           (*s_etat_processus).evaluation_forcee =
                                   registre_evaluation_forcee;
                         (*s_etat_processus).instruction_courante =                          (*s_etat_processus).instruction_courante =
                                 instruction_courante;                                  instruction_courante;
                         (*s_etat_processus).mode_execution_programme = 'N';                          (*s_etat_processus).mode_execution_programme = 'N';
Line 3145  evaluation(struct_processus *s_etat_proc Line 3193  evaluation(struct_processus *s_etat_proc
                     registre_test_2 = (*s_etat_processus).test_instruction;                      registre_test_2 = (*s_etat_processus).test_instruction;
                     (*s_etat_processus).test_instruction = 'N';                      (*s_etat_processus).test_instruction = 'N';
   
                       registre_type_evaluation = (test_cfsf(s_etat_processus, 35)
                               == d_vrai) ? 'E' : 'N';
   
                       if (type_evaluation == 'N')
                       {
                           cf(s_etat_processus, 35);
                       }
                       else
                       {
                           sf(s_etat_processus, 35);
                       }
   
                     analyse(s_etat_processus, NULL);                      analyse(s_etat_processus, NULL);
   
                       if (registre_type_evaluation == 'E')
                       {
                           sf(s_etat_processus, 35);
                       }
                       else
                       {
                           cf(s_etat_processus, 35);
                       }
   
                     (*s_etat_processus).test_instruction = registre_test_2;                      (*s_etat_processus).test_instruction = registre_test_2;
   
                     if ((*s_etat_processus).erreur_systeme != d_es)                      if ((*s_etat_processus).erreur_systeme != d_es)
Line 3955  evaluation(struct_processus *s_etat_proc Line 4024  evaluation(struct_processus *s_etat_proc
                                 {                                  {
                                     /*                                      /*
                                      * La fin de l'expression est atteinte,                                       * La fin de l'expression est atteinte,
                                      * le sequenceur reprend la main.                                       * le séquenceur reprend la main.
                                      */                                       */
   
                                     if (presence_egalite == d_vrai)                                      if (presence_egalite == d_vrai)
Line 4336  evaluation(struct_processus *s_etat_proc Line 4405  evaluation(struct_processus *s_etat_proc
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es;                          (*s_etat_processus).erreur_systeme = d_es;
                         presence_variable = d_faux;                          presence_variable = d_faux;
   
                           if ((*s_etat_processus).autorisation_nom_implicite
                                   == 'N')
                           {
                               if ((*((struct_nom *) (*s_objet_elementaire).objet))
                                       .symbole == d_faux)
                               {
                                   if (test_cfsf(s_etat_processus, 31) == d_vrai)
                                   {
                                       if (empilement_pile_last(s_etat_processus,
                                               0) == d_erreur)
                                       {
                                           return(d_erreur);
                                       }
                                   }
   
                                   erreur_evaluation = d_erreur;
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_nom_implicite;
   
                                   if (type_evaluation == 'I')
                                   {
                                       (*s_etat_processus)
                                               .derniere_erreur_evaluation =
                                               (*s_etat_processus)
                                               .erreur_execution;
                                   }
                               }
                           }
                     }                      }
                     else                      else
                     {                      {
Line 4532  evaluation(struct_processus *s_etat_proc Line 4630  evaluation(struct_processus *s_etat_proc
                             }                              }
                         }                          }
   
                           registre_evaluation_forcee =
                                   (*s_etat_processus).evaluation_forcee;
   
                           if (type_evaluation == 'N')
                           {
                               (*s_etat_processus).evaluation_forcee = 'Y';
                           }
   
                         if (sequenceur(s_etat_processus) == d_erreur)                          if (sequenceur(s_etat_processus) == d_erreur)
                         {                          {
                               (*s_etat_processus).evaluation_forcee =
                                   registre_evaluation_forcee;
   
                             if (presence_egalite == d_vrai)                              if (presence_egalite == d_vrai)
                             {                              {
                                 liberation(s_etat_processus, s_objet_evalue);                                  liberation(s_etat_processus, s_objet_evalue);
Line 4546  evaluation(struct_processus *s_etat_proc Line 4655  evaluation(struct_processus *s_etat_proc
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                           (*s_etat_processus).evaluation_forcee =
                               registre_evaluation_forcee;
                         (*s_etat_processus).instruction_courante =                          (*s_etat_processus).instruction_courante =
                                 instruction_courante;                                  instruction_courante;
                         (*s_etat_processus).mode_execution_programme = 'N';                          (*s_etat_processus).mode_execution_programme = 'N';
Line 5016  evaluation(struct_processus *s_etat_proc Line 5127  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
                           // d'exécution puisqu'on empile une constante
                           // symbolique.
   
                         if (presence_egalite == d_vrai)                          if (presence_egalite == d_vrai)
                         {                          {
                             liberation(s_etat_processus, s_objet_evalue);                              liberation(s_etat_processus, s_objet_evalue);

Removed from v.1.3  
changed lines
  Added in v.1.12


CVSweb interface <joel.bertrand@systella.fr>