Diff for /rpl/src/types.c between versions 1.84 and 1.90

version 1.84, 2017/06/29 12:33:35 version 1.90, 2017/08/03 17:17:51
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.27    RPL/2 (R) version 4.1.28
   Copyright (C) 1989-2017 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 19 Line 19
 ================================================================================  ================================================================================
 */  */
   
 #define DEBUG_ERREURS  
 #include "rpl-conv.h"  #include "rpl-conv.h"
   
   
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 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 3490  recherche_type(struct_processus *s_etat_ Line 3542  recherche_type(struct_processus *s_etat_
   
                 while((*ptr) != d_code_fin_chaine)                  while((*ptr) != d_code_fin_chaine)
                 {                  {
                     if ((isalnum((*ptr)) == 0) &&                      if (isalnum(*ptr) != 0)
                             ((*ptr) != '_') &&                      {
                             ((*ptr) != '$'))                          ptr++;
                       }
                       else if (((*ptr) == '_') || ((*ptr == '$')))
                       {
                           ptr++;
                       }
                       else
                     {                      {
                         liberation(s_etat_processus, s_objet);                          liberation(s_etat_processus, s_objet);
   
                         (*s_etat_processus).erreur_execution = d_ex_syntaxe;                          (*s_etat_processus).erreur_execution = d_ex_syntaxe;
                         (*s_etat_processus).traitement_interruptible =                          (*s_etat_processus).traitement_interruptible =
                                 registre_interruption;                                  registre_interruption;
   
                         return;                          return;
                     }                      }
   
                     ptr++;  
                 }                  }
   
                 (*s_objet).type = NOM;                  (*s_objet).type = NOM;
Line 3650  recherche_type(struct_processus *s_etat_ Line 3705  recherche_type(struct_processus *s_etat_
   
     (*s_etat_processus).traitement_interruptible = registre_interruption;      (*s_etat_processus).traitement_interruptible = registre_interruption;
     return;      return;
   
 extention_type:  
     return;  
 }  }
   
   

Removed from v.1.84  
changed lines
  Added in v.1.90


CVSweb interface <joel.bertrand@systella.fr>