Diff for /rpl/src/evaluation.c between versions 1.16 and 1.21

version 1.16, 2010/05/19 09:22:33 version 1.21, 2010/07/12 15:55:00
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.15    RPL/2 (R) version 4.0.17
   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 436  evaluation(struct_processus *s_etat_proc Line 436  evaluation(struct_processus *s_etat_proc
                     }                      }
                 }                  }
   
                   autorisation_empilement_programme = (*s_etat_processus)
                           .autorisation_empilement_programme;
   
                   empilement_pile_systeme(s_etat_processus);
   
                   if ((*s_etat_processus).erreur_systeme != d_es)
                   {
                       if (presence_variable_partagee == d_vrai)
                       {
                           liberation(s_etat_processus, s_copie_variable_partagee);
                       }
   
                       (*s_etat_processus).instruction_courante =
                               instruction_courante;
                       return(d_erreur);
                   }
   
                   (*(*s_etat_processus).l_base_pile_systeme)
                           .retour_definition = 'Y';
                   (*(*s_etat_processus).l_base_pile_systeme)
                           .origine_routine_evaluation = 'Y';
   
                   (*s_etat_processus).mode_execution_programme = 'Y';
                   (*s_etat_processus).autorisation_empilement_programme = 'N';
   
                   (*(*s_etat_processus).l_base_pile_systeme)
                           .niveau_courant = (*s_etat_processus)
                           .niveau_courant;
   
                   empilement_pile_systeme(s_etat_processus);
   
                 if (presence_variable_partagee == d_faux)                  if (presence_variable_partagee == d_faux)
                 {                  {
                     if (evaluation(s_etat_processus, (*s_etat_processus)                      if (evaluation(s_etat_processus, (*s_etat_processus)
Line 488  evaluation(struct_processus *s_etat_proc Line 519  evaluation(struct_processus *s_etat_proc
                     profilage(s_etat_processus, NULL);                      profilage(s_etat_processus, NULL);
                 }                  }
   
                   depilement_pile_systeme(s_etat_processus);
                   depilement_pile_systeme(s_etat_processus);
   
                   if ((*s_etat_processus).erreur_systeme != d_es)
                   {
                       return(d_erreur);
                   }
   
                 (*s_etat_processus).evaluation_expression_compilee =                  (*s_etat_processus).evaluation_expression_compilee =
                         registre_evaluation_expression_compilee;                          registre_evaluation_expression_compilee;
                   (*s_etat_processus).autorisation_empilement_programme =
                           autorisation_empilement_programme;
             }              }
             else if ((*s_etat_processus).erreur_execution != d_ex_nom_implicite)              else if ((*s_etat_processus).erreur_execution != d_ex_nom_implicite)
             {              {
Line 1120  evaluation(struct_processus *s_etat_proc Line 1161  evaluation(struct_processus *s_etat_proc
                                             {                                              {
                                                 depilement_pile_systeme(                                                  depilement_pile_systeme(
                                                         s_etat_processus);                                                          s_etat_processus);
                                               }
   
                                                 if ((*s_etat_processus)                                              if ((*s_etat_processus)
                                                         .erreur_systeme != d_es)                                                      .erreur_systeme != d_es)
                                               {
                                                   if (presence_egalite ==
                                                           d_vrai)
                                                 {                                                  {
                                                     if (presence_egalite ==                                                      liberation(
                                                             d_vrai)                                                          s_etat_processus,
                                                     {                                                          s_objet_evalue);
                                                         liberation(  
                                                             s_etat_processus,  
                                                             s_objet_evalue);  
                                                     }  
   
                                                     (*s_etat_processus)  
                                                         .instruction_courante =  
                                                         instruction_courante;  
                                                     return(d_erreur);  
                                                 }                                                  }
   
                                                   (*s_etat_processus)
                                                       .instruction_courante =
                                                       instruction_courante;
                                                   return(d_erreur);
                                             }                                              }
                                         }                                          }
                                     }                                      }
Line 4532  evaluation(struct_processus *s_etat_proc Line 4573  evaluation(struct_processus *s_etat_proc
   
                     if (presence_fonction == d_vrai)                      if (presence_fonction == d_vrai)
                     {                      {
                         autorisation_empilement_programme = (*s_etat_processus)                          if ((*((struct_nom *) (*(*l_element_courant).donnee)
                                 .autorisation_empilement_programme;                                  .objet)).symbole == d_vrai)
                         registre_position_courante = (*s_etat_processus)  
                                 .position_courante;  
   
                         empilement_pile_systeme(s_etat_processus);  
   
                         if ((*s_etat_processus).erreur_systeme != d_es)  
                         {                          {
                             if (presence_variable_partagee == d_vrai)                              // L'objet apparaît comme un symbole dans
                               // l'expression en cours d'évaluation. On se
                               // contente de l'empiler.
   
                               if ((s_sous_objet = copie_objet(s_etat_processus,
                                       (*l_element_courant).donnee, 'P')) == NULL)
                             {                              {
                                 liberation(s_etat_processus,                                  (*s_etat_processus).instruction_courante =
                                         s_copie_variable_partagee);                                          instruction_courante;
   
                                   (*s_etat_processus).erreur_systeme =
                                           d_es_allocation_memoire;
                                   return(d_erreur);
                             }                              }
   
                             if (presence_egalite == d_vrai)                              if (empilement(s_etat_processus,
                                       &((*s_etat_processus).l_base_pile),
                                       s_sous_objet) == d_erreur)
                             {                              {
                                 liberation(s_etat_processus, s_objet_evalue);                                  (*s_etat_processus).instruction_courante =
                                           instruction_courante;
                                   liberation(s_etat_processus, s_sous_objet);
                                   return(d_erreur);
                             }                              }
   
                             (*s_etat_processus).instruction_courante =  
                                     instruction_courante;  
                             return(d_erreur);  
                         }  
   
                         (*(*s_etat_processus).l_base_pile_systeme)  
                                 .retour_definition = 'Y';  
                         (*(*s_etat_processus).l_base_pile_systeme)  
                                 .origine_routine_evaluation = 'Y';  
   
                         (*s_etat_processus).mode_execution_programme = 'Y';  
                         (*s_etat_processus).autorisation_empilement_programme  
                                 = 'N';  
   
                         (*(*s_etat_processus).l_base_pile_systeme)  
                                 .niveau_courant = (*s_etat_processus)  
                                 .niveau_courant;  
   
                         if (presence_variable_partagee == d_faux)  
                         {  
                             (*s_etat_processus).position_courante =  
                                     (*((unsigned long *)  
                                     ((*((*s_etat_processus).s_liste_variables  
                                     [(*s_etat_processus)  
                                     .position_variable_courante]  
                                     .objet)).objet)));  
                         }                          }
                         else                          else
                         {                          {
                             (*s_etat_processus).position_courante =                              autorisation_empilement_programme =
                                     (*((unsigned long *)                                      (*s_etat_processus)
                                     (*s_copie_variable_partagee).objet));                                      .autorisation_empilement_programme;
                             liberation(s_etat_processus,                              registre_position_courante = (*s_etat_processus)
                                     s_copie_variable_partagee);                                      .position_courante;
                         }  
   
                         if ((*s_etat_processus).profilage == d_vrai)                              empilement_pile_systeme(s_etat_processus);
                         {  
                             profilage(s_etat_processus,  
                                     (*s_etat_processus).s_liste_variables  
                                     [(*s_etat_processus)  
                                     .position_variable_courante].nom);  
   
                             if ((*s_etat_processus).erreur_systeme != d_es)                              if ((*s_etat_processus).erreur_systeme != d_es)
                             {                              {
                                   if (presence_variable_partagee == d_vrai)
                                   {
                                       liberation(s_etat_processus,
                                               s_copie_variable_partagee);
                                   }
   
                                   if (presence_egalite == d_vrai)
                                   {
                                       liberation(s_etat_processus,
                                               s_objet_evalue);
                                   }
   
                                   (*s_etat_processus).instruction_courante =
                                           instruction_courante;
                                 return(d_erreur);                                  return(d_erreur);
                             }                              }
                         }  
   
                         registre_evaluation_forcee =                              (*(*s_etat_processus).l_base_pile_systeme)
                                 (*s_etat_processus).evaluation_forcee;                                      .retour_definition = 'Y';
                               (*(*s_etat_processus).l_base_pile_systeme)
                                       .origine_routine_evaluation = 'Y';
   
                         if (type_evaluation == 'N')                              (*s_etat_processus).mode_execution_programme = 'Y';
                         {                              (*s_etat_processus)
                             (*s_etat_processus).evaluation_forcee = 'Y';                                      .autorisation_empilement_programme = 'N';
                         }  
   
                         if (sequenceur(s_etat_processus) == d_erreur)                              (*(*s_etat_processus).l_base_pile_systeme)
                         {                                      .niveau_courant = (*s_etat_processus)
                             (*s_etat_processus).evaluation_forcee =                                      .niveau_courant;
                                 registre_evaluation_forcee;  
   
                             if (presence_egalite == d_vrai)                              if (presence_variable_partagee == d_faux)
                             {                              {
                                 liberation(s_etat_processus, s_objet_evalue);                                  (*s_etat_processus).position_courante =
                                           (*((unsigned long *)
                                           ((*((*s_etat_processus)
                                           .s_liste_variables[(*s_etat_processus)
                                           .position_variable_courante]
                                           .objet)).objet)));
                               }
                               else
                               {
                                   (*s_etat_processus).position_courante =
                                           (*((unsigned long *)
                                           (*s_copie_variable_partagee).objet));
                                   liberation(s_etat_processus,
                                           s_copie_variable_partagee);
                             }                              }
   
                               if ((*s_etat_processus).profilage == d_vrai)
                               {
                                   profilage(s_etat_processus,
                                           (*s_etat_processus).s_liste_variables
                                           [(*s_etat_processus)
                                           .position_variable_courante].nom);
   
                                   if ((*s_etat_processus).erreur_systeme != d_es)
                                   {
                                       return(d_erreur);
                                   }
                               }
   
                               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)
                               {
                                   (*s_etat_processus).evaluation_forcee =
                                       registre_evaluation_forcee;
   
                                   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).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 =                              (*s_etat_processus).mode_execution_programme = 'N';
                                     registre_mode_execution_programme;  
                             return(d_erreur);  
                         }  
   
                         (*s_etat_processus).evaluation_forcee =  
                             registre_evaluation_forcee;  
                         (*s_etat_processus).instruction_courante =  
                                 instruction_courante;  
                         (*s_etat_processus).mode_execution_programme = 'N';  
   
                         depilement_pile_systeme(s_etat_processus);                              depilement_pile_systeme(s_etat_processus);
   
                         if ((*s_etat_processus).erreur_systeme != d_es)                              if ((*s_etat_processus).erreur_systeme != d_es)
                         {  
                             if (presence_egalite == d_vrai)  
                             {                              {
                                 liberation(s_etat_processus, s_objet_evalue);                                  if (presence_egalite == d_vrai)
                                   {
                                       liberation(s_etat_processus,
                                               s_objet_evalue);
                                   }
   
                                   return(d_erreur);
                             }                              }
   
                             return(d_erreur);                              (*s_etat_processus).retour_routine_evaluation = 'N';
                               (*s_etat_processus).position_courante =
                                       registre_position_courante;
                               (*s_etat_processus)
                                       .autorisation_empilement_programme =
                                       autorisation_empilement_programme;
                         }                          }
   
                         (*s_etat_processus).retour_routine_evaluation = 'N';  
                         (*s_etat_processus).position_courante =  
                                 registre_position_courante;  
                         (*s_etat_processus).autorisation_empilement_programme =  
                                 autorisation_empilement_programme;  
                     }                      }
                     else if (((type_evaluation == 'N') || ((*((struct_nom *)                      else if (((type_evaluation == 'N') || ((*((struct_nom *)
                             (*(*l_element_courant).donnee).objet)).symbole ==                              (*(*l_element_courant).donnee).objet)).symbole ==

Removed from v.1.16  
changed lines
  Added in v.1.21


CVSweb interface <joel.bertrand@systella.fr>