Diff for /rpl/src/types.c between versions 1.59 and 1.88

version 1.59, 2013/03/21 11:30:31 version 1.88, 2017/07/12 15:43:07
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.27
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2017 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 56  recherche_type(struct_processus *s_etat_ Line 56  recherche_type(struct_processus *s_etat_
     integer8                    profondeur_initiale;      integer8                    profondeur_initiale;
     integer8                    sauvegarde_niveau_courant;      integer8                    sauvegarde_niveau_courant;
     integer8                    sauvegarde_longueur_definitions_chainees;      integer8                    sauvegarde_longueur_definitions_chainees;
       integer8                    (*__type_new)(struct_processus *, void **);
   
     struct_liste_chainee        *l_base_liste_fonctions;      struct_liste_chainee        *l_base_liste_fonctions;
     struct_liste_chainee        *l_base_liste_decomposition;      struct_liste_chainee        *l_base_liste_decomposition;
Line 143  recherche_type(struct_processus *s_etat_ Line 144  recherche_type(struct_processus *s_etat_
                  */                   */
   
                 if (((*((struct_fonction *) element)).nom_fonction =                  if (((*((struct_fonction *) element)).nom_fonction =
                         conversion_majuscule((*s_etat_processus)                          conversion_majuscule(s_etat_processus,
                         .instruction_courante)) == NULL)                          (*s_etat_processus).instruction_courante)) == NULL)
                 {                  {
                     (*s_etat_processus).erreur_systeme =                      (*s_etat_processus).erreur_systeme =
                             d_es_allocation_memoire;                              d_es_allocation_memoire;
Line 191  recherche_type(struct_processus *s_etat_ Line 192  recherche_type(struct_processus *s_etat_
         }          }
         else          else
         {          {
             if ((instruction_majuscule = conversion_majuscule(              if ((instruction_majuscule = conversion_majuscule(s_etat_processus,
                     (*s_etat_processus).instruction_courante)) == NULL)                      (*s_etat_processus).instruction_courante)) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 260  recherche_type(struct_processus *s_etat_ Line 261  recherche_type(struct_processus *s_etat_
   
     (*s_etat_processus).instruction_valide = registre_instruction_valide;      (*s_etat_processus).instruction_valide = registre_instruction_valide;
   
   /*
   --------------------------------------------------------------------------------
     Types externes
   --------------------------------------------------------------------------------
   */
   
       l_element_courant = (*s_etat_processus).s_bibliotheques;
   
       while(l_element_courant != NULL)
       {
           if ((__type_new = dlsym((*((struct_bibliotheque *)
                   (*l_element_courant).donnee)).descripteur, "__type_new"))
                   != NULL)
           {
               if (((*s_objet).extension_type = __type_new(s_etat_processus,
                       &element)) != 0)
               {
                   // Le type peut être converti.
   
                   (*s_objet).objet = element;
                   (*s_objet).type = EXT;
                   (*s_objet).descripteur_bibliotheque =
                           (*((struct_bibliotheque *)
                           (*l_element_courant).donnee)).descripteur;
   
                   if (empilement(s_etat_processus,
                           &((*s_etat_processus).l_base_pile), s_objet)
                           == d_erreur)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       (*s_etat_processus).traitement_interruptible =
                               registre_interruption;
                       return;
                   }
   
                   (*s_etat_processus).traitement_interruptible =
                           registre_interruption;
                   return;
               }
           }
   
           l_element_courant = (*l_element_courant).suivant;
       }
   
   /*
   --------------------------------------------------------------------------------
     Types internes
   --------------------------------------------------------------------------------
   */
   
     switch(*((*s_etat_processus).instruction_courante))      switch(*((*s_etat_processus).instruction_courante))
     {      {
   
Line 2666  recherche_type(struct_processus *s_etat_ Line 2718  recherche_type(struct_processus *s_etat_
                          * elle est convertie en majuscules.                           * elle est convertie en majuscules.
                          */                           */
   
                         tampon = conversion_majuscule((*((struct_fonction *)                          tampon = conversion_majuscule(s_etat_processus,
                                   (*((struct_fonction *)
                                 (*(*l_element_courant).donnee).objet))                                  (*(*l_element_courant).donnee).objet))
                                 .nom_fonction);                                  .nom_fonction);
   
Line 2704  recherche_type(struct_processus *s_etat_ Line 2757  recherche_type(struct_processus *s_etat_
                                 {                                  {
                                     if ((fonction_majuscule =                                      if ((fonction_majuscule =
                                             conversion_majuscule(                                              conversion_majuscule(
                                               s_etat_processus,
                                             (*((struct_fonction *)                                              (*((struct_fonction *)
                                             ((*l_element_courant_fonctions)                                              ((*l_element_courant_fonctions)
                                             .donnee))).nom_fonction)) == NULL)                                              .donnee))).nom_fonction)) == NULL)
Line 2855  recherche_type(struct_processus *s_etat_ Line 2909  recherche_type(struct_processus *s_etat_
                 free(l_element_courant_fonctions);                  free(l_element_courant_fonctions);
             }              }
   
               (*s_etat_processus).autorisation_empilement_programme = 'Y';
             break;              break;
         }          }
   
Line 2915  recherche_type(struct_processus *s_etat_ Line 2970  recherche_type(struct_processus *s_etat_
             {              {
                 // Tableau                  // Tableau
   
                   (*s_etat_processus).type_en_cours = TBL;
                 sauvegarde_longueur_definitions_chainees =                  sauvegarde_longueur_definitions_chainees =
                         (*s_etat_processus).longueur_definitions_chainees;                          (*s_etat_processus).longueur_definitions_chainees;
   
Line 2976  recherche_type(struct_processus *s_etat_ Line 3032  recherche_type(struct_processus *s_etat_
   
                 (*(*s_etat_processus).l_base_pile_systeme)                  (*(*s_etat_processus).l_base_pile_systeme)
                         .retour_definition = 'Y';                          .retour_definition = 'Y';
                   (*(*s_etat_processus).l_base_pile_systeme)
                           .origine_routine_evaluation = 'N';
                 (*s_etat_processus).niveau_courant = 0;                  (*s_etat_processus).niveau_courant = 0;
                 (*s_etat_processus).autorisation_empilement_programme = 'N';                  (*s_etat_processus).autorisation_empilement_programme = 'N';
   
                   tampon = (*s_etat_processus).instruction_courante;
                   autorisation_evaluation_nom = (*s_etat_processus)
                           .autorisation_evaluation_nom;
                   (*s_etat_processus).autorisation_evaluation_nom = 'N';
   
                 registre_mode_execution_programme =                  registre_mode_execution_programme =
                         (*s_etat_processus).mode_execution_programme;                          (*s_etat_processus).mode_execution_programme;
                 (*s_etat_processus).mode_execution_programme = 'Y';                  (*s_etat_processus).mode_execution_programme = 'Y';
                 (*s_etat_processus).erreur_scrutation = d_faux;                  (*s_etat_processus).erreur_scrutation = d_faux;
   
                 tampon = (*s_etat_processus).instruction_courante;  
                 nombre_lignes_a_supprimer =                  nombre_lignes_a_supprimer =
                         (*s_etat_processus).hauteur_pile_operationnelle;                          (*s_etat_processus).hauteur_pile_operationnelle;
   
Line 3032  recherche_type(struct_processus *s_etat_ Line 3095  recherche_type(struct_processus *s_etat_
                     }                      }
   
                     (*s_etat_processus).instruction_courante = tampon;                      (*s_etat_processus).instruction_courante = tampon;
                       (*s_etat_processus).autorisation_evaluation_nom =
                               autorisation_evaluation_nom;
   
                     effacement_pile_systeme(s_etat_processus);                      effacement_pile_systeme(s_etat_processus);
                     (*s_etat_processus).l_base_pile_systeme =                      (*s_etat_processus).l_base_pile_systeme =
Line 3085  recherche_type(struct_processus *s_etat_ Line 3150  recherche_type(struct_processus *s_etat_
                     }                      }
   
                     (*s_etat_processus).instruction_courante = tampon;                      (*s_etat_processus).instruction_courante = tampon;
                       (*s_etat_processus).autorisation_evaluation_nom =
                               autorisation_evaluation_nom;
   
                     effacement_pile_systeme(s_etat_processus);                      effacement_pile_systeme(s_etat_processus);
                     (*s_etat_processus).l_base_pile_systeme =                      (*s_etat_processus).l_base_pile_systeme =
Line 3112  recherche_type(struct_processus *s_etat_ Line 3179  recherche_type(struct_processus *s_etat_
                 }                  }
   
                 (*s_etat_processus).instruction_courante = tampon;                  (*s_etat_processus).instruction_courante = tampon;
                   (*s_etat_processus).autorisation_evaluation_nom =
                           autorisation_evaluation_nom;
   
                 (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile;                  (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile;
                 (*s_etat_processus).niveau_courant =                  (*s_etat_processus).niveau_courant =
Line 3183  recherche_type(struct_processus *s_etat_ Line 3252  recherche_type(struct_processus *s_etat_
             {              {
                 // Définition                  // Définition
   
                   (*s_etat_processus).type_en_cours = RPN;
   
                 if (strlen((*s_etat_processus).instruction_courante) < 5)                  if (strlen((*s_etat_processus).instruction_courante) < 5)
                 {                  {
                     liberation(s_etat_processus, s_objet);                      liberation(s_etat_processus, s_objet);

Removed from v.1.59  
changed lines
  Added in v.1.88


CVSweb interface <joel.bertrand@systella.fr>