Diff for /rpl/src/compilation.c between versions 1.77 and 1.89

version 1.77, 2015/02/19 11:01:18 version 1.89, 2017/06/29 12:33:34
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.21    RPL/2 (R) version 4.1.27
   Copyright (C) 1989-2015 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 917  recherche_instruction_suivante_recursive Line 917  recherche_instruction_suivante_recursive
     int                         erreur_analyse;      int                         erreur_analyse;
     int                         erreur_format;      int                         erreur_format;
   
       integer8                    nombre_caracteres;
       integer8                    (*__type_parse)(struct_processus
                                           *s_etat_processus);
   
   
     unsigned char               base_binaire;      unsigned char               base_binaire;
     unsigned char               caractere_fin;      unsigned char               caractere_fin;
     unsigned char               *pointeur_caractere_courant;      unsigned char               *pointeur_caractere_courant;
Line 926  recherche_instruction_suivante_recursive Line 931  recherche_instruction_suivante_recursive
   
     signed long                 niveau;      signed long                 niveau;
   
       struct_liste_chainee        *l_element_courant;
   
     erreur_analyse = d_ex;      erreur_analyse = d_ex;
     erreur_format = d_ex;      erreur_format = d_ex;
     erreur = d_absence_erreur;      erreur = d_absence_erreur;
   
       /*
        * On regarde s'il existe des fonctions permettant de parser
        * les objets dans les bibliothèques externes.
        */
   
       l_element_courant = (*s_etat_processus).s_bibliotheques;
   
       while(l_element_courant != NULL)
       {
           if ((__type_parse = dlsym((*((struct_bibliotheque *)
                   (*l_element_courant).donnee)).descripteur, "__type_parse"))
                   != NULL)
           {
               // Une fonction declareTypeExtension(parse) se trouve dans la
               // bibliothèque. Si cette fonction renvoie une valeur non nulle,
               // elle a réussi à parser correctement un objet.
   
               if ((nombre_caracteres = __type_parse(s_etat_processus)) != 0)
               {
                   if (((*s_etat_processus).instruction_courante =
                           malloc((((unsigned) nombre_caracteres) + 1)
                           * sizeof(unsigned char))) == NULL)
                   {
                       (*s_etat_processus).erreur_systeme =
                               d_es_allocation_memoire;
                       return(d_erreur);
                   }
   
                   strncpy((*s_etat_processus).instruction_courante,
                           (*s_etat_processus).instruction_courante +
                           (*s_etat_processus).position_courante,
                           (unsigned) nombre_caracteres);
                   (*s_etat_processus).instruction_courante[nombre_caracteres]
                           = d_code_fin_chaine;
   
                   (*s_etat_processus).position_courante += nombre_caracteres;
                   return(erreur);
               }
           }
   
           l_element_courant = (*l_element_courant).suivant;
       }
   
       /*
        * Gestion des types intrinsèques
        */
   
     switch((*s_etat_processus).type_en_cours)      switch((*s_etat_processus).type_en_cours)
     {      {
         case RPN:          case RPN:
Line 1501  recherche_instruction_suivante_recursive Line 1555  recherche_instruction_suivante_recursive
                                 pointeur_caractere_courant++;                                  pointeur_caractere_courant++;
                                 break;                                  break;
                             }                              }
                               else if ((*pointeur_caractere_courant) == '=')
                               {   // Cas de '>='
                                   pointeur_caractere_courant++;
                               }
                             else if ((*pointeur_caractere_courant) !=                              else if ((*pointeur_caractere_courant) !=
                                     d_code_espace)                                      d_code_espace)
                             {   // Tous les cas différents de '>'                              {   // Tous les cas différents de '>'
Line 1651  recherche_instruction_suivante_recursive Line 1709  recherche_instruction_suivante_recursive
         }          }
         else if ((*pointeur_caractere_courant) == caractere_fin)          else if ((*pointeur_caractere_courant) == caractere_fin)
         {          {
             // Condition pour traiter les cas 123}              // Condition pour traiter les cas "123}"
             break;              break;
         }          }
     }      }
Line 1706  recherche_instruction_suivante_recursive Line 1764  recherche_instruction_suivante_recursive
         erreur = ((erreur_analyse == d_ex) && (erreur_format == d_ex))          erreur = ((erreur_analyse == d_ex) && (erreur_format == d_ex))
                 ? d_absence_erreur : d_erreur;                  ? d_absence_erreur : d_erreur;
         (*s_etat_processus).erreur_execution = erreur_analyse;          (*s_etat_processus).erreur_execution = erreur_analyse;
   
           if ((*s_etat_processus).erreur_execution == d_ex)
           {
               (*s_etat_processus).erreur_execution = erreur_format;
           }
     }      }
     else      else
     {      {

Removed from v.1.77  
changed lines
  Added in v.1.89


CVSweb interface <joel.bertrand@systella.fr>