Diff for /rpl/src/gestion_pile_systeme.c between versions 1.51 and 1.87

version 1.51, 2013/03/05 16:20:47 version 1.87, 2020/01/10 11:15:43
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.32
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2020 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 39  static inline void Line 39  static inline void
 estimation_taille_pile_systeme(struct_processus *s_etat_processus)  estimation_taille_pile_systeme(struct_processus *s_etat_processus)
 {  {
     (*s_etat_processus).estimation_taille_pile_systeme_tampon =      (*s_etat_processus).estimation_taille_pile_systeme_tampon =
             ((*s_etat_processus).estimation_taille_pile_systeme_tampon *              (((double) (*s_etat_processus)
             ((double) 0.9)) + ((*s_etat_processus)              .estimation_taille_pile_systeme_tampon) *
             .hauteur_pile_systeme * ((double) 0.1));              ((double) 0.9)) + (((double) (*s_etat_processus)
               .hauteur_pile_systeme) * ((double) 0.1));
     return;      return;
 }  }
   
Line 132  empilement_pile_systeme(struct_processus Line 133  empilement_pile_systeme(struct_processus
     (*(*s_etat_processus).l_base_pile_systeme).adresse_retour = 0;      (*(*s_etat_processus).l_base_pile_systeme).adresse_retour = 0;
     (*(*s_etat_processus).l_base_pile_systeme).niveau_courant =      (*(*s_etat_processus).l_base_pile_systeme).niveau_courant =
             (*s_etat_processus).niveau_courant;              (*s_etat_processus).niveau_courant;
     (*(*s_etat_processus).l_base_pile_systeme).pointeur_adresse_retour = NULL;  
     (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';      (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N';
     (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;      (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;
     (*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle = NULL;      (*(*s_etat_processus).l_base_pile_systeme).limite_indice_boucle = NULL;
Line 149  empilement_pile_systeme(struct_processus Line 149  empilement_pile_systeme(struct_processus
             = (*s_etat_processus).creation_variables_partagees;              = (*s_etat_processus).creation_variables_partagees;
     (*(*s_etat_processus).l_base_pile_systeme).evaluation_expression =      (*(*s_etat_processus).l_base_pile_systeme).evaluation_expression =
             d_faux;              d_faux;
       (*(*s_etat_processus).l_base_pile_systeme).debug_programme =
               (*s_etat_processus).debug_programme;
   
     (*s_etat_processus).erreur_systeme = d_es;      (*s_etat_processus).erreur_systeme = d_es;
     (*s_etat_processus).creation_variables_statiques = d_faux;      (*s_etat_processus).creation_variables_statiques = d_faux;
Line 303  effacement_pile_systeme(struct_processus Line 305  effacement_pile_systeme(struct_processus
 void  void
 trace(struct_processus *s_etat_processus, FILE *flux)  trace(struct_processus *s_etat_processus, FILE *flux)
 {  {
     int                             candidat;  
     int                             j;  
     int                             nb_variables;  
   
     integer8                        i;      integer8                        i;
       integer8                        j;
       integer8                        candidat;
     integer8                        candidat8;      integer8                        candidat8;
     integer8                        delta;      integer8                        delta;
       integer8                        nb_variables;
   
     struct_liste_chainee            *l_element_expression;      struct_liste_chainee            *l_element_expression;
   
Line 333  trace(struct_processus *s_etat_processus Line 334  trace(struct_processus *s_etat_processus
   
     nb_variables = nombre_variables(s_etat_processus);      nb_variables = nombre_variables(s_etat_processus);
   
     if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables)))      if ((tableau = malloc(((size_t) nb_variables) *
             == NULL)              sizeof(struct_tableau_variables))) == NULL)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;          (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
         return;          return;
Line 349  trace(struct_processus *s_etat_processus Line 350  trace(struct_processus *s_etat_processus
   
     while(l_element_courant != NULL)      while(l_element_courant != NULL)
     {      {
         fprintf(flux, "%d : address # %016Xh\n", i--, l_element_courant);          fprintf(flux, "%lld : address # %016Xh\n", i--, l_element_courant);
   
         if ((*l_element_courant).creation_variables_statiques == d_vrai)          if ((*l_element_courant).creation_variables_statiques == d_vrai)
         {          {
Line 493  trace(struct_processus *s_etat_processus Line 494  trace(struct_processus *s_etat_processus
             }              }
         }          }
   
         fprintf(flux, "    Level             = %d\n",          fprintf(flux, "    Level             = %lld\n",
                 (*l_element_courant).niveau_courant);                  (long long int) (*l_element_courant).niveau_courant);
   
         if (((*l_element_courant).retour_definition == 'Y') ||          if ((*l_element_courant).retour_definition == 'Y')
                 ((*l_element_courant).origine_routine_evaluation == 'Y'))  
         {          {
             fprintf(flux, "    Return            = yes\n");              fprintf(flux, "    Return            = yes\n");
   
Line 515  trace(struct_processus *s_etat_processus Line 515  trace(struct_processus *s_etat_processus
   
                     for(j = 0; j < nb_variables; j++)                      for(j = 0; j < nb_variables; j++)
                     {                      {
                         if (((*(tableau[j].objet)).type == RPN) ||                          if (tableau[j].objet != NULL)
                                 ((*(tableau[j].objet)).type == ALG))  
                         {                          {
                             l_element_expression = (*(tableau[j].objet)).objet;                              // Variable ni partagée ni statique
                               if (((*(tableau[j].objet)).type == RPN) ||
                             while(l_element_expression != NULL)                                      ((*(tableau[j].objet)).type == ALG))
                             {                              {
                                 if (l_element_expression == (*l_element_courant)                                  l_element_expression =
                                         .pointeur_objet_retour)                                          (*(tableau[j].objet)).objet;
   
                                   while(l_element_expression != NULL)
                                 {                                  {
                                     candidat = j;                                      if (l_element_expression ==
                                     break;                                              (*l_element_courant)
                                 }                                              .pointeur_objet_retour)
                                       {
                                           candidat = j;
                                           break;
                                       }
   
                                 l_element_expression =                                      l_element_expression =
                                         (*l_element_expression).suivant;                                              (*l_element_expression).suivant;
                             }                                  }
   
                             if (candidat != -1)                                  if (candidat != -1)
                             {                                  {
                                 break;                                      break;
                                   }
                             }                              }
                         }                          }
                     }                      }
Line 572  trace(struct_processus *s_etat_processus Line 578  trace(struct_processus *s_etat_processus
                 }                  }
                 else                  else
                 {                  {
                       fprintf(flux, "    Come from         = compiled code\n");
                     fprintf(flux, "                      = "                      fprintf(flux, "                      = "
                             "optimized definition\n");                              "optimized definition\n");
                 }                  }
Line 596  trace(struct_processus *s_etat_processus Line 603  trace(struct_processus *s_etat_processus
                         if ((*(tableau[j].objet)).type == ADR)                          if ((*(tableau[j].objet)).type == ADR)
                         {                          {
                             delta = (*l_element_courant).adresse_retour                              delta = (*l_element_courant).adresse_retour
                                     - (*((unsigned long *)                                      - (*((integer8 *)
                                     (*(tableau[j].objet)).objet));                                      (*(tableau[j].objet)).objet));
   
                             if ((delta >= 0) && (delta < candidat8))                              if ((delta >= 0) && (delta < candidat8))
Line 618  trace(struct_processus *s_etat_processus Line 625  trace(struct_processus *s_etat_processus
                                 "unknown definition\n");                                  "unknown definition\n");
                     }                      }
                 }                  }
                 else                  else if ((*l_element_courant).niveau_courant == 0)
                 {                  {
                     fprintf(flux, "\n");                      fprintf(flux, "\n");
                     fprintf(flux, "                      = RPL/2 "                      fprintf(flux, "                      = RPL/2 "
                             "initialization\n");                              "initialization\n");
                 }                  }
                   else
                   {
                       fprintf(flux, "\n");
                   }
             }              }
         }          }
         else          else
Line 631  trace(struct_processus *s_etat_processus Line 642  trace(struct_processus *s_etat_processus
             fprintf(flux, "    Return            = no\n");              fprintf(flux, "    Return            = no\n");
         }          }
   
         if ((*l_element_courant).indice_boucle != NULL)          if (((*l_element_courant).indice_boucle != NULL) &&
                   ((*l_element_courant).type_cloture != 'A'))
         {          {
             tampon = formateur(s_etat_processus, 24,              tampon = formateur(s_etat_processus, 24,
                     (*l_element_courant).indice_boucle);                      (*l_element_courant).indice_boucle);
Line 666  trace(struct_processus *s_etat_processus Line 678  trace(struct_processus *s_etat_processus
         l_element_courant = (*l_element_courant).suivant;          l_element_courant = (*l_element_courant).suivant;
     }      }
   
     fprintf(flux, "\n");  
     funlockfile(flux);      funlockfile(flux);
   
     free(tableau);      free(tableau);

Removed from v.1.51  
changed lines
  Added in v.1.87


CVSweb interface <joel.bertrand@systella.fr>