Diff for /rpl/src/compilation.c between versions 1.67 and 1.68

version 1.67, 2014/07/17 08:07:16 version 1.68, 2014/07/26 09:58:02
Line 1017  swap(void *variable_1, void *variable_2, Line 1017  swap(void *variable_1, void *variable_2,
 logical1  logical1
 recherche_instruction_suivante(struct_processus *s_etat_processus)  recherche_instruction_suivante(struct_processus *s_etat_processus)
 {  {
       enum t_type                 registre_type_en_cours;
   
     logical1                    drapeau_fin_objet;      logical1                    drapeau_fin_objet;
     logical1                    erreur;      logical1                    erreur;
   
Line 1024  recherche_instruction_suivante(struct_pr Line 1026  recherche_instruction_suivante(struct_pr
     int                         erreur_format;      int                         erreur_format;
   
     unsigned char               base_binaire;      unsigned char               base_binaire;
       unsigned char               caractere_fin;
     unsigned char               *pointeur_caractere_courant;      unsigned char               *pointeur_caractere_courant;
     unsigned char               *pointeur_caractere_destination;      unsigned char               *pointeur_caractere_destination;
     unsigned char               *pointeur_debut_instruction;      unsigned char               *pointeur_debut_instruction;
     unsigned char               *pointeur_fin_instruction;      unsigned char               *pointeur_fin_instruction;
   
     signed long                 niveau;      signed long                 niveau;
     signed long                 niveau_annexe;  
   
     erreur_analyse = d_ex;      erreur_analyse = d_ex;
     erreur_format = d_ex;      erreur_format = d_ex;
     erreur = d_absence_erreur;      erreur = d_absence_erreur;
   
       switch((*s_etat_processus).type_en_cours)
       {
           case RPN:
           {
               caractere_fin = '>';
               break;
           }
   
           case LST:
           {
               caractere_fin = '}';
               break;
           }
   
           case TBL:
           {
               caractere_fin = ']';
               break;
           }
   
           default:
           {
               caractere_fin = d_code_espace;
               break;
           }
       }
   
     drapeau_fin_objet = d_faux;      drapeau_fin_objet = d_faux;
     niveau = 0;      niveau = 0;
   
Line 1074  recherche_instruction_suivante(struct_pr Line 1103  recherche_instruction_suivante(struct_pr
     while(((*pointeur_caractere_courant) != d_code_espace) &&      while(((*pointeur_caractere_courant) != d_code_espace) &&
             ((*pointeur_caractere_courant) != d_code_fin_chaine) &&              ((*pointeur_caractere_courant) != d_code_fin_chaine) &&
             (drapeau_fin_objet == d_faux) &&              (drapeau_fin_objet == d_faux) &&
             (erreur_analyse == d_ex) &&              (erreur_analyse == d_ex) && (erreur_format == d_ex))
             (erreur_format == d_ex))  
     {      {
         switch(*pointeur_caractere_courant++)          switch(*pointeur_caractere_courant++)
         {          {
Line 1294  recherche_instruction_suivante(struct_pr Line 1322  recherche_instruction_suivante(struct_pr
                 pointeur_caractere_courant++;                  pointeur_caractere_courant++;
   
                 if (((*pointeur_caractere_courant) != d_code_fin_chaine) &&                  if (((*pointeur_caractere_courant) != d_code_fin_chaine) &&
                         ((*pointeur_caractere_courant) != ' '))                          ((*pointeur_caractere_courant) != d_code_espace) &&
                           ((*pointeur_caractere_courant) != caractere_fin))
                 {                  {
                     erreur_analyse = d_ex_syntaxe;                      erreur_analyse = d_ex_syntaxe;
                 }                  }
Line 1418  recherche_instruction_suivante(struct_pr Line 1447  recherche_instruction_suivante(struct_pr
                 }                  }
   
                 niveau = 1;                  niveau = 1;
                 niveau_annexe = 0;  
   
                 while((niveau != 0) && ((*pointeur_caractere_courant) !=                  while((niveau != 0) && ((*pointeur_caractere_courant) !=
                         d_code_fin_chaine))                          d_code_fin_chaine))
Line 1427  recherche_instruction_suivante(struct_pr Line 1455  recherche_instruction_suivante(struct_pr
                             pointeur_caractere_courant                              pointeur_caractere_courant
                             - (*s_etat_processus).definitions_chainees;                              - (*s_etat_processus).definitions_chainees;
   
                       registre_type_en_cours = (*s_etat_processus).type_en_cours;
                       (*s_etat_processus).type_en_cours = LST;
   
                     if (recherche_instruction_suivante(s_etat_processus)                      if (recherche_instruction_suivante(s_etat_processus)
                             == d_erreur)                              == d_erreur)
                     {                      {
                           (*s_etat_processus).type_en_cours =
                                   registre_type_en_cours;
   
                         if ((*s_etat_processus).instruction_courante                          if ((*s_etat_processus).instruction_courante
                                 != NULL)                                  != NULL)
                         {                          {
                             free((*s_etat_processus).instruction_courante);                              free((*s_etat_processus).instruction_courante);
                               (*s_etat_processus).instruction_courante = NULL;
                         }                          }
   
                         return(d_erreur);                          return(d_erreur);
Line 1443  recherche_instruction_suivante(struct_pr Line 1478  recherche_instruction_suivante(struct_pr
                             (*s_etat_processus).definitions_chainees +                              (*s_etat_processus).definitions_chainees +
                             (*s_etat_processus).position_courante;                              (*s_etat_processus).position_courante;
   
                     if (strcmp((*s_etat_processus).instruction_courante, "{")                      if (strcmp((*s_etat_processus).instruction_courante, "}")
                             == 0)                              == 0)
                     {                      {
                         if (niveau_annexe == 0)  
                         {  
                             niveau++;  
                         }  
                         else  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "}") == 0)  
                     {  
                         if (niveau_annexe == 0)  
                         {  
                             niveau--;  
                         }  
                         else  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "<[") == 0)  
                     {  
                         niveau++;  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "]>") == 0)  
                     {  
                         niveau--;                          niveau--;
                     }                      }
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "[") == 0)  
                     {  
                         niveau_annexe++;  
   
                         if (niveau_annexe > 2)  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "[[") == 0)  
                     {  
                         niveau_annexe += 2;  
   
                         if (niveau_annexe > 2)  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "]") == 0)  
                     {  
                         niveau_annexe--;  
   
                         if (niveau_annexe < 0)  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if (strcmp((*s_etat_processus).instruction_courante,  
                             "]]") == 0)  
                     {  
                         niveau_annexe -= 2;  
   
                         if (niveau_annexe < 0)  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
                     else if ((*s_etat_processus).instruction_courante[0] == '"')  
                     {  
                         if (niveau_annexe != 0)  
                         {  
                             erreur_analyse = d_ex_syntaxe;  
                         }  
                     }  
   
                     free((*s_etat_processus).instruction_courante);                      free((*s_etat_processus).instruction_courante);
                 }                  }
   
                 if ((niveau != 0) || (niveau_annexe != 0))                  if (niveau != 0)
                 {                  {
                     erreur_analyse = d_ex_syntaxe;                      erreur_analyse = d_ex_syntaxe;
                 }                  }
Line 1635  recherche_instruction_suivante(struct_pr Line 1594  recherche_instruction_suivante(struct_pr
                                 pointeur_caractere_courant                                  pointeur_caractere_courant
                                 - (*s_etat_processus).definitions_chainees;                                  - (*s_etat_processus).definitions_chainees;
   
                           registre_type_en_cours = (*s_etat_processus)
                                   .type_en_cours;
                           (*s_etat_processus).type_en_cours = RPN;
   
                         if (recherche_instruction_suivante(s_etat_processus)                          if (recherche_instruction_suivante(s_etat_processus)
                                 == d_erreur)                                  == d_erreur)
                         {                          {
                               (*s_etat_processus).type_en_cours =
                                       registre_type_en_cours;
   
                             if ((*s_etat_processus).instruction_courante                              if ((*s_etat_processus).instruction_courante
                                     != NULL)                                      != NULL)
                             {                              {
                                 free((*s_etat_processus).instruction_courante);                                  free((*s_etat_processus).instruction_courante);
                                   (*s_etat_processus).instruction_courante = NULL;
                             }                              }
   
                             return(d_erreur);                              return(d_erreur);
                         }                          }
   
                           (*s_etat_processus).type_en_cours =
                                   registre_type_en_cours;
                         pointeur_caractere_courant =                          pointeur_caractere_courant =
                                 (*s_etat_processus).definitions_chainees +                                  (*s_etat_processus).definitions_chainees +
                                 (*s_etat_processus).position_courante;                                  (*s_etat_processus).position_courante;
Line 1713  recherche_instruction_suivante(struct_pr Line 1682  recherche_instruction_suivante(struct_pr
                                     pointeur_caractere_courant                                      pointeur_caractere_courant
                                     - (*s_etat_processus).definitions_chainees;                                      - (*s_etat_processus).definitions_chainees;
   
                               registre_type_en_cours = (*s_etat_processus)
                                       .type_en_cours;
                               (*s_etat_processus).type_en_cours = TBL;
   
                             if ((erreur = recherche_instruction_suivante(                              if ((erreur = recherche_instruction_suivante(
                                     s_etat_processus)) != d_absence_erreur)                                      s_etat_processus)) != d_absence_erreur)
                             {                              {
                                   (*s_etat_processus).type_en_cours =
                                           registre_type_en_cours;
   
                                 if ((*s_etat_processus).instruction_courante                                  if ((*s_etat_processus).instruction_courante
                                         != NULL)                                          != NULL)
                                 {                                  {
                                     free((*s_etat_processus)                                      free((*s_etat_processus)
                                             .instruction_courante);                                              .instruction_courante);
                                       (*s_etat_processus).instruction_courante
                                               = NULL;
                                 }                                  }
   
                                 return(d_erreur);                                  return(d_erreur);
                             }                              }
   
                               (*s_etat_processus).type_en_cours =
                                       registre_type_en_cours;
                             pointeur_caractere_courant = (*s_etat_processus)                              pointeur_caractere_courant = (*s_etat_processus)
                                     .definitions_chainees + (*s_etat_processus)                                      .definitions_chainees + (*s_etat_processus)
                                     .position_courante;                                      .position_courante;
Line 1744  recherche_instruction_suivante(struct_pr Line 1724  recherche_instruction_suivante(struct_pr
                 break;                  break;
             }              }
         }          }
   
           if ((*pointeur_caractere_courant) == caractere_fin)
           {
               break;
           }
     }      }
   
     pointeur_fin_instruction = pointeur_caractere_courant;      pointeur_fin_instruction = pointeur_caractere_courant;
Line 1779  recherche_instruction_suivante(struct_pr Line 1764  recherche_instruction_suivante(struct_pr
         (*(*s_etat_processus).instruction_courante) = d_code_fin_chaine;          (*(*s_etat_processus).instruction_courante) = d_code_fin_chaine;
     }      }
   
   uprintf("%c %s\n", caractere_fin, (*s_etat_processus).instruction_courante);
     (*s_etat_processus).position_courante = pointeur_fin_instruction      (*s_etat_processus).position_courante = pointeur_fin_instruction
             - (*s_etat_processus).definitions_chainees;              - (*s_etat_processus).definitions_chainees;
   

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


CVSweb interface <joel.bertrand@systella.fr>