Diff for /rpl/src/compilation.c between versions 1.93 and 1.94

version 1.93, 2018/05/30 09:27:31 version 1.94, 2018/12/24 15:21:26
Line 951  recherche_instruction_suivante_recursive Line 951  recherche_instruction_suivante_recursive
         }          }
   
         case TBL:          case TBL:
           case REC:
         {          {
             caractere_fin = ']';              caractere_fin = ']';
             break;              break;
Line 1697  recherche_instruction_suivante_recursive Line 1698  recherche_instruction_suivante_recursive
   
                 break;                  break;
             }              }
   
               case '|' :
               {
                   if ((*pointeur_caractere_courant) == '[')
                   { // Cas |[ ]|
                       if (pointeur_debut_instruction !=
                               (pointeur_caractere_courant - 1))
                       {
                           erreur_format = d_ex_syntaxe;
                       }
   
                       pointeur_caractere_courant++;
                       drapeau_fin_objet = d_faux;
   
                       while(((*pointeur_caractere_courant) != d_code_fin_chaine)
                               && (erreur_format == d_absence_erreur))
                       {
                           while((*pointeur_caractere_courant) == d_code_espace)
                           {
                               pointeur_caractere_courant++;
                           }
   
                           if ((*pointeur_caractere_courant) == ']')
                           {
                               if ((*(++pointeur_caractere_courant)) == '|')
                               {
                                   drapeau_fin_objet = d_vrai;
                               }
                               else
                               {
                                   erreur_analyse = d_ex_syntaxe;
                               }
   
                               pointeur_caractere_courant++;
                               break;
                           }
   
                           if ((erreur_format == d_absence_erreur) &&
                                   (drapeau_fin_objet == d_faux))
                           {
                               (*s_etat_processus).position_courante =
                                       pointeur_caractere_courant
                                       - (*s_etat_processus).definitions_chainees;
   
                               registre_type_en_cours = (*s_etat_processus)
                                       .type_en_cours;
                               (*s_etat_processus).type_en_cours = REC;
   
                               if ((erreur =
                                       recherche_instruction_suivante_recursive(
                                       s_etat_processus, recursivite + 1))
                                       != d_absence_erreur)
                               {
                                   (*s_etat_processus).type_en_cours =
                                           registre_type_en_cours;
   
                                   if ((*s_etat_processus).instruction_courante
                                           != NULL)
                                   {
                                       free((*s_etat_processus)
                                               .instruction_courante);
                                       (*s_etat_processus).instruction_courante
                                               = NULL;
                                   }
   
                                   return(d_erreur);
                               }
   
                               (*s_etat_processus).type_en_cours =
                                       registre_type_en_cours;
                               pointeur_caractere_courant = (*s_etat_processus)
                                       .definitions_chainees + (*s_etat_processus)
                                       .position_courante;
   
                               free((*s_etat_processus).instruction_courante);
                           }
                       }
   
                       if (drapeau_fin_objet == d_faux)
                       {
                           erreur_analyse = d_ex_syntaxe;
                           drapeau_fin_objet = d_vrai;
                       }
                   }
   
                   break;
               }
         }          }
   
         if ((*(pointeur_caractere_courant - 1)) == caractere_fin)          if ((*(pointeur_caractere_courant - 1)) == caractere_fin)
         {          {
             // Cas des objets composites (LST, RPN, TBL)              // Cas des objets composites (LST, RPN, TBL, REC)
             break;              break;
         }          }
         else if ((*pointeur_caractere_courant) == caractere_fin)          else if ((*pointeur_caractere_courant) == caractere_fin)

Removed from v.1.93  
changed lines
  Added in v.1.94


CVSweb interface <joel.bertrand@systella.fr>