Diff for /rpl/src/optimisation.c between versions 1.23 and 1.24

version 1.23, 2011/06/20 17:54:21 version 1.24, 2011/06/20 21:08:22
Line 38 Line 38
 logical1  logical1
 sequenceur_optimise(struct_processus *s_etat_processus)  sequenceur_optimise(struct_processus *s_etat_processus)
 {  {
     logical1                erreur;      int                         i;
       int                         nb_variables;
       int                         point_entree;
   
     long                    i;      logical1                    erreur;
     long                    point_entree;  
   
     unsigned char           *message;      struct_objet                *programme_principal;
   
     unsigned long           adresse_point_entree;      struct_tableau_variables    *tableau;
   
       unsigned char               *message;
   
       unsigned long               adresse_point_entree;
   
     if ((*s_etat_processus).debug == d_vrai)      if ((*s_etat_processus).debug == d_vrai)
         if (((*s_etat_processus).type_debug &          if (((*s_etat_processus).type_debug &
Line 72  sequenceur_optimise(struct_processus *s_ Line 77  sequenceur_optimise(struct_processus *s_
     (*s_etat_processus).autorisation_empilement_programme = 'Y';      (*s_etat_processus).autorisation_empilement_programme = 'Y';
     (*s_etat_processus).mode_execution_programme = 'N';      (*s_etat_processus).mode_execution_programme = 'N';
   
     BUG(1);      nb_variables = nombre_variables(s_etat_processus,
 #if 0              (*s_etat_processus).s_arbre_variables);
     for(i = 0; i < (long) (*s_etat_processus).nombre_variables; i++)  
       if ((tableau = malloc(nb_variables * sizeof(struct_tableau_variables)))
               == NULL)
       {
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Mémoire insuffisante\n");
           }
           else
           {
               printf("+++System : Not enough memory\n");
           }
   
           return(d_erreur);
       }
   
       liste_variables(s_etat_processus, tableau, 0,
               (*s_etat_processus).s_arbre_variables);
   
       for(i = 0; i < nb_variables; i++)
     {      {
         if ((*s_etat_processus).s_liste_variables[i].niveau == 0)          if (tableau[i].niveau == 0)
         {          {
             // Variables qui contiennent les points d'entrée des définitions.              // Variables qui contiennent les points d'entrée des définitions.
   
             (*s_etat_processus).position_courante = (*((unsigned long *)              (*s_etat_processus).position_courante = (*((unsigned long *)
                     (*((*s_etat_processus).s_liste_variables[i].objet)).objet));                      (*(tableau[i].objet)).objet));
   
             if (point_entree == -1)              if (point_entree == -1)
             {              {
Line 111  sequenceur_optimise(struct_processus *s_ Line 135  sequenceur_optimise(struct_processus *s_
                     printf("+++Fatal : Optimization failed\n");                      printf("+++Fatal : Optimization failed\n");
                 }                  }
   
                   free(tableau);
                 return(d_erreur);                  return(d_erreur);
             }              }
   
Line 128  sequenceur_optimise(struct_processus *s_ Line 153  sequenceur_optimise(struct_processus *s_
                     printf("+++Fatal : Optimization failed\n");                      printf("+++Fatal : Optimization failed\n");
                 }                  }
   
                   free(tableau);
                 return(d_erreur);                  return(d_erreur);
             }              }
   
             liberation(s_etat_processus,              // Modification de la variable. Il n'existe à cet instant
                     (*s_etat_processus).s_liste_variables[i].objet);              // que des variables de niveau 0.
   
               if (recherche_variable(s_etat_processus, tableau[i].nom) ==
                       d_faux)
               {
                   if ((*s_etat_processus).langue == 'F')
                   {
                       printf("+++Fatal : Optimisation impossible\n");
                   }
                   else
                   {
                       printf("+++Fatal : Optimization failed\n");
                   }
   
                   free(tableau);
                   return(d_erreur);
               }
   
               liberation(s_etat_processus, tableau[i].objet);
   
             if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),              if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile),
                     &((*s_etat_processus).s_liste_variables[i].objet))                      &((*(*s_etat_processus).pointeur_variable_courante).objet))
                     == d_erreur)                      == d_erreur)
             {              {
                 if ((*s_etat_processus).langue == 'F')                  if ((*s_etat_processus).langue == 'F')
Line 147  sequenceur_optimise(struct_processus *s_ Line 191  sequenceur_optimise(struct_processus *s_
                     printf("+++Fatal : Optimization failed\n");                      printf("+++Fatal : Optimization failed\n");
                 }                  }
   
                   free(tableau);
                 return(d_erreur);                  return(d_erreur);
             }              }
   
             (*s_etat_processus).s_liste_variables[i].origine = 'E';              (*(*s_etat_processus).pointeur_variable_courante).origine = 'E';
             free((*s_etat_processus).instruction_courante);              free((*s_etat_processus).instruction_courante);
   
               if (point_entree == i)
               {
                   programme_principal = (*(*s_etat_processus)
                           .pointeur_variable_courante).objet;
               }
         }          }
     }      }
   
Line 166  sequenceur_optimise(struct_processus *s_ Line 217  sequenceur_optimise(struct_processus *s_
             printf("+++Fatal : Optimization failed\n");              printf("+++Fatal : Optimization failed\n");
         }          }
   
           free(tableau);
         return(d_erreur);          return(d_erreur);
     }      }
   
Line 206  sequenceur_optimise(struct_processus *s_ Line 258  sequenceur_optimise(struct_processus *s_
             printf("+++Fatal : Optimization failed\n");              printf("+++Fatal : Optimization failed\n");
         }          }
   
           free(tableau);
         return(d_erreur);          return(d_erreur);
     }      }
   
Line 215  sequenceur_optimise(struct_processus *s_ Line 268  sequenceur_optimise(struct_processus *s_
   
     if ((*s_etat_processus).profilage == d_vrai)      if ((*s_etat_processus).profilage == d_vrai)
     {      {
         profilage(s_etat_processus, (*s_etat_processus).s_liste_variables          profilage(s_etat_processus, tableau[point_entree].nom);
                 [point_entree].nom);  
     }      }
   
     if ((*s_etat_processus).erreur_systeme != d_es)      if ((*s_etat_processus).erreur_systeme != d_es)
Line 230  sequenceur_optimise(struct_processus *s_ Line 282  sequenceur_optimise(struct_processus *s_
             printf("+++System : Not enough memory\n");              printf("+++System : Not enough memory\n");
         }          }
   
           free(tableau);
         return(d_erreur);          return(d_erreur);
     }      }
   
     erreur = evaluation(s_etat_processus, (*s_etat_processus).s_liste_variables      free(tableau);
             [point_entree].objet, 'E');  
       erreur = evaluation(s_etat_processus, programme_principal, 'E');
   
     if ((*s_etat_processus).profilage == d_vrai)      if ((*s_etat_processus).profilage == d_vrai)
     {      {
Line 259  sequenceur_optimise(struct_processus *s_ Line 313  sequenceur_optimise(struct_processus *s_
     }      }
   
     return(erreur);      return(erreur);
 #endif  
 }  }
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.23  
changed lines
  Added in v.1.24


CVSweb interface <joel.bertrand@systella.fr>