Diff for /rpl/src/types.c between versions 1.67 and 1.85

version 1.67, 2014/07/24 14:38:44 version 1.85, 2017/06/29 14:54:42
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.19    RPL/2 (R) version 4.1.27
   Copyright (C) 1989-2014 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 38 Line 38
 void  void
 recherche_type(struct_processus *s_etat_processus)  recherche_type(struct_processus *s_etat_processus)
 {  {
     enum t_type                 registre_type;  
   
     integer8                    i;      integer8                    i;
     integer8                    j;      integer8                    j;
     integer8                    niveau;      integer8                    niveau;
Line 58  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
                                           *s_etat_processus, void **arg);
   
     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 119  recherche_type(struct_processus *s_etat_ Line 119  recherche_type(struct_processus *s_etat_
     (*s_etat_processus).test_instruction = 'Y';      (*s_etat_processus).test_instruction = 'Y';
     (*s_etat_processus).traitement_interruptible = 'N';      (*s_etat_processus).traitement_interruptible = 'N';
   
   uprintf(".%s.\n", (*s_etat_processus).instruction_courante);
     analyse(s_etat_processus, NULL);      analyse(s_etat_processus, NULL);
   
     (*s_etat_processus).test_instruction = registre_test;      (*s_etat_processus).test_instruction = registre_test;
Line 145  recherche_type(struct_processus *s_etat_ Line 146  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 193  recherche_type(struct_processus *s_etat_ Line 194  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 262  recherche_type(struct_processus *s_etat_ Line 263  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;
   
                   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 276  recherche_type(struct_processus *s_etat_ Line 325  recherche_type(struct_processus *s_etat_
             element = (void *) ((struct_complexe16 *) malloc(              element = (void *) ((struct_complexe16 *) malloc(
                     sizeof(struct_complexe16)));                      sizeof(struct_complexe16)));
   
               if (element == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 (*s_etat_processus).traitement_interruptible =                  (*s_etat_processus).traitement_interruptible =
Line 1084  recherche_type(struct_processus *s_etat_ Line 1134  recherche_type(struct_processus *s_etat_
   
                 case d_faux :                  case d_faux :
                 {                  {
                     registre_type = (*s_etat_processus).type_en_cours;  
   
                     if (drapeau_complexe == d_vrai)  
                     {  
                         (*s_etat_processus).type_en_cours = VCX;  
                     }  
                     else if (drapeau_reel == d_vrai)  
                     {  
                         (*s_etat_processus).type_en_cours = VRL;  
                     }  
                     else  
                     {  
                         (*s_etat_processus).type_en_cours = VIN;  
                     }  
   
   
 /*  /*
 -- Sauvegarde des paramètres du processus pour analyser le vecteur -------------  -- Sauvegarde des paramètres du processus pour analyser le vecteur -------------
Line 1507  recherche_type(struct_processus *s_etat_ Line 1542  recherche_type(struct_processus *s_etat_
                         (*s_objet).type = VIN;                          (*s_objet).type = VIN;
                     }                      }
   
                     (*s_etat_processus).type_en_cours = registre_type;  
                     break;                      break;
                 }                  }
   
Line 1519  recherche_type(struct_processus *s_etat_ Line 1553  recherche_type(struct_processus *s_etat_
   
                 case d_vrai :                  case d_vrai :
                 {                  {
                     registre_type = (*s_etat_processus).type_en_cours;  
   
                     if (drapeau_complexe == d_vrai)  
                     {  
                         (*s_etat_processus).type_en_cours = MCX;  
                     }  
                     else if (drapeau_reel == d_vrai)  
                     {  
                         (*s_etat_processus).type_en_cours = MRL;  
                     }  
                     else  
                     {  
                         (*s_etat_processus).type_en_cours = MIN;  
                     }  
   
                     nombre_lignes--;                      nombre_lignes--;
   
                     sauvegarde_longueur_definitions_chainees =                      sauvegarde_longueur_definitions_chainees =
Line 2153  recherche_type(struct_processus *s_etat_ Line 2172  recherche_type(struct_processus *s_etat_
                         fflush(stdout);                          fflush(stdout);
                     }                      }
   
                     (*s_etat_processus).type_en_cours = registre_type;  
                     break;                      break;
                 }                  }
             }              }
Line 2169  recherche_type(struct_processus *s_etat_ Line 2187  recherche_type(struct_processus *s_etat_
   
         case '{' :          case '{' :
         {          {
             registre_type = (*s_etat_processus).type_en_cours;  
             (*s_etat_processus).type_en_cours = LST;  
   
             sauvegarde_longueur_definitions_chainees =              sauvegarde_longueur_definitions_chainees =
                     (*s_etat_processus).longueur_definitions_chainees;                      (*s_etat_processus).longueur_definitions_chainees;
   
Line 2553  recherche_type(struct_processus *s_etat_ Line 2568  recherche_type(struct_processus *s_etat_
             (*s_objet).type = LST;              (*s_objet).type = LST;
             element = (void *) l_element_courant;              element = (void *) l_element_courant;
   
             (*s_etat_processus).type_en_cours = registre_type;  
             break;              break;
         }          }
   
Line 2703  recherche_type(struct_processus *s_etat_ Line 2717  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 2741  recherche_type(struct_processus *s_etat_ Line 2756  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 2892  recherche_type(struct_processus *s_etat_ Line 2908  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 2948  recherche_type(struct_processus *s_etat_ Line 2965  recherche_type(struct_processus *s_etat_
   
         case '<' :          case '<' :
         {          {
             registre_type = (*s_etat_processus).type_en_cours;  
   
             if ((*s_etat_processus).instruction_courante[1] == '[')              if ((*s_etat_processus).instruction_courante[1] == '[')
             {              {
                 // Tableau                  // Tableau
Line 3016  recherche_type(struct_processus *s_etat_ Line 3031  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 3072  recherche_type(struct_processus *s_etat_ Line 3094  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 3125  recherche_type(struct_processus *s_etat_ Line 3149  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 3152  recherche_type(struct_processus *s_etat_ Line 3178  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 3284  recherche_type(struct_processus *s_etat_ Line 3312  recherche_type(struct_processus *s_etat_
                 }                  }
             }              }
   
             (*s_etat_processus).type_en_cours = registre_type;  
             break;              break;
         }          }
   

Removed from v.1.67  
changed lines
  Added in v.1.85


CVSweb interface <joel.bertrand@systella.fr>