Diff for /rpl/src/sequenceur.c between versions 1.6 and 1.28

version 1.6, 2010/02/26 19:22:05 version 1.28, 2011/01/03 12:08:09
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.11    RPL/2 (R) version 4.0.20
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 199  sequenceur(struct_processus *s_etat_proc Line 199  sequenceur(struct_processus *s_etat_proc
                             (*s_etat_processus).localisation, d_locale))                              (*s_etat_processus).localisation, d_locale))
                             == NULL)                              == NULL)
                     {                      {
                           free((*s_etat_processus).instruction_courante);
                         return(d_erreur);                          return(d_erreur);
                     }                      }
   
Line 305  sequenceur(struct_processus *s_etat_proc Line 306  sequenceur(struct_processus *s_etat_proc
   
                         if ((message = messages(s_etat_processus)) == NULL)                          if ((message = messages(s_etat_processus)) == NULL)
                         {                          {
                               free((*s_etat_processus).instruction_courante);
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
Line 364  sequenceur(struct_processus *s_etat_proc Line 366  sequenceur(struct_processus *s_etat_proc
                                 if ((message = messages(s_etat_processus))                                  if ((message = messages(s_etat_processus))
                                         == NULL)                                          == NULL)
                                 {                                  {
                                       free((*s_etat_processus)
                                               .instruction_courante);
                                     return(d_erreur);                                      return(d_erreur);
                                 }                                  }
   
                                 printf("%s [%d]\n", message, (int) getpid());                                  printf("%s [%d]\n", message, (int) getpid());
                                 free(message);  
   
                                   free(message);
                                   free((*s_etat_processus).instruction_courante);
                                 return(d_erreur);                                  return(d_erreur);
                             }                              }
                             else if ((*s_etat_processus)                              else if ((*s_etat_processus)
Line 387  sequenceur(struct_processus *s_etat_proc Line 392  sequenceur(struct_processus *s_etat_proc
                                 if ((message = messages(s_etat_processus))                                  if ((message = messages(s_etat_processus))
                                         == NULL)                                          == NULL)
                                 {                                  {
                                       free((*s_etat_processus)
                                               .instruction_courante);
                                     return(d_erreur);                                      return(d_erreur);
                                 }                                  }
   
Line 452  sequenceur(struct_processus *s_etat_proc Line 459  sequenceur(struct_processus *s_etat_proc
   
                     if ((message = messages(s_etat_processus)) == NULL)                      if ((message = messages(s_etat_processus)) == NULL)
                     {                      {
                           free((*s_etat_processus).instruction_courante);
                         free(ligne);                          free(ligne);
                         return(d_erreur);                          return(d_erreur);
                     }                      }
Line 808  sequenceur(struct_processus *s_etat_proc Line 816  sequenceur(struct_processus *s_etat_proc
                     (*s_etat_processus).erreur_systeme = d_es;                      (*s_etat_processus).erreur_systeme = d_es;
                     recherche_type(s_etat_processus);                      recherche_type(s_etat_processus);
   
                       if ((*s_etat_processus).autorisation_nom_implicite == 'N')
                       {
                           if ((*s_etat_processus).l_base_pile == NULL)
                           {
                               (*s_etat_processus).erreur_execution =
                                       d_ex_manque_argument;
                           }
                           else if ((*(*(*s_etat_processus).l_base_pile).donnee)
                                   .type == NOM)
                           {
                               if ((*((struct_nom *) (*(*(*s_etat_processus)
                                       .l_base_pile).donnee).objet)).symbole
                                       == d_faux)
                               {
                                   (*s_etat_processus).erreur_execution =
                                           d_ex_nom_implicite;
   
                                   // Si le niveau de récursivité est non nul, on
                                   // arrive ici depuis la fonction
                                   // recherche_type(). On retourne à cette
                                   // dernière en indiquant une erreur.
   
                                   if ((*s_etat_processus).niveau_recursivite != 0)
                                   {
                                       free((*s_etat_processus)
                                               .instruction_courante);
                                       return(d_erreur);
                                   }
                               }
                           }
                       }
   
                     // Le séquenceur est appelé depuis la routine d'évaluation                      // Le séquenceur est appelé depuis la routine d'évaluation
   
                     if ((*s_etat_processus).evaluation_forcee == 'Y')                      if ((*s_etat_processus).evaluation_forcee == 'Y')
Line 816  sequenceur(struct_processus *s_etat_proc Line 856  sequenceur(struct_processus *s_etat_proc
                                 &((*s_etat_processus).l_base_pile),                                  &((*s_etat_processus).l_base_pile),
                                 &s_objet_evaluation) == d_erreur)                                  &s_objet_evaluation) == d_erreur)
                         {                          {
                               free((*s_etat_processus).instruction_courante);
                             (*s_etat_processus).erreur_execution =                              (*s_etat_processus).erreur_execution =
                                     d_ex_manque_argument;                                      d_ex_manque_argument;
                             return(d_erreur);                              return(d_erreur);
Line 824  sequenceur(struct_processus *s_etat_proc Line 865  sequenceur(struct_processus *s_etat_proc
                         if (evaluation(s_etat_processus, s_objet_evaluation,                          if (evaluation(s_etat_processus, s_objet_evaluation,
                                 'N') == d_erreur)                                  'N') == d_erreur)
                         {                          {
                               free((*s_etat_processus).instruction_courante);
                             liberation(s_etat_processus, s_objet_evaluation);                              liberation(s_etat_processus, s_objet_evaluation);
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                         liberation(s_etat_processus, s_objet_evaluation);                          liberation(s_etat_processus, s_objet_evaluation);
                     }                      }
   
                       // Le séquenceur est appelé depuis la routine de
                       // recherche de type
   
                       else if ((*s_etat_processus).recherche_type == 'Y')
                       {
                           if ((*s_etat_processus).erreur_execution != d_ex)
                           {
                               free((*s_etat_processus).instruction_courante);
                               return(d_erreur);
                           }
                       }
                 }                  }
             }              }
             else if (((*s_etat_processus).test_instruction == 'Y') &&              else if (((*s_etat_processus).test_instruction == 'Y') &&
Line 854  sequenceur(struct_processus *s_etat_proc Line 908  sequenceur(struct_processus *s_etat_proc
                         != 0) && (strcmp((*s_etat_processus)                          != 0) && (strcmp((*s_etat_processus)
                         .instruction_courante, ">>") != 0))                          .instruction_courante, ">>") != 0))
                 {                  {
                     if ((s_objet = (struct_objet *) malloc(                      if ((s_objet = allocation(s_etat_processus, FCT)) == NULL)
                             sizeof(struct_objet))) == NULL)  
                     {  
                         (*s_etat_processus).erreur_systeme =  
                                 d_es_allocation_memoire;  
                         return(d_erreur);  
                     }  
   
                     initialisation_objet(s_objet);  
                     (*s_objet).type = FCT;  
   
                     if (((*s_objet).objet = allocation(s_etat_processus, FCT))  
                             == NULL)  
                     {                      {
                         (*s_etat_processus).erreur_systeme =                          (*s_etat_processus).erreur_systeme =
                                 d_es_allocation_memoire;                                  d_es_allocation_memoire;
Line 949  sequenceur(struct_processus *s_etat_proc Line 991  sequenceur(struct_processus *s_etat_proc
   
             fflush(stdout);              fflush(stdout);
   
               free((*s_etat_processus).instruction_courante);
             return(d_erreur);              return(d_erreur);
         }          }
   
Line 1030  sequenceur(struct_processus *s_etat_proc Line 1073  sequenceur(struct_processus *s_etat_proc
   
             if ((message = messages(s_etat_processus)) == NULL)              if ((message = messages(s_etat_processus)) == NULL)
             {              {
                   free((*s_etat_processus).instruction_courante);
                 return(d_erreur);                  return(d_erreur);
             }              }
   
Line 1116  sequenceur(struct_processus *s_etat_proc Line 1160  sequenceur(struct_processus *s_etat_proc
   
                     if (erreur == d_erreur)                      if (erreur == d_erreur)
                     {                      {
                           free((*s_etat_processus).instruction_courante);
                         return(d_erreur);                          return(d_erreur);
                     }                      }
   
Line 1137  sequenceur(struct_processus *s_etat_proc Line 1182  sequenceur(struct_processus *s_etat_proc
   
                             if ((*s_etat_processus).erreur_systeme != d_es)                              if ((*s_etat_processus).erreur_systeme != d_es)
                             {                              {
                                   free((*s_etat_processus).instruction_courante);
                                 return(d_erreur);                                  return(d_erreur);
                             }                              }
   
Line 1170  sequenceur(struct_processus *s_etat_proc Line 1216  sequenceur(struct_processus *s_etat_proc
   
                         if (instruction_majuscule == NULL)                          if (instruction_majuscule == NULL)
                         {                          {
                               free((*s_etat_processus).instruction_courante);
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   

Removed from v.1.6  
changed lines
  Added in v.1.28


CVSweb interface <joel.bertrand@systella.fr>