--- rpl/src/compilation.c 2015/01/27 14:18:05 1.72 +++ rpl/src/compilation.c 2015/06/08 14:11:29 1.79 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.20 + RPL/2 (R) version 4.1.22 Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -281,6 +281,15 @@ compilation(struct_processus *s_etat_pro while(i <= position_fin_nom_definition) { + if ((*s_etat_processus).pointeurs_caracteres_variables + [(*s_etat_processus).definitions_chainees[i]] < 0) + { + free(s_variable); + + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + return(d_erreur); + } + *(definition++) = (*s_etat_processus) .definitions_chainees[i++]; } @@ -290,6 +299,8 @@ compilation(struct_processus *s_etat_pro if (recherche_variable(s_etat_processus, (*s_variable).nom) == d_vrai) { + free(s_variable); + if ((*s_etat_processus).langue == 'F') { printf("+++Attention : Plusieurs définitions de" @@ -311,7 +322,6 @@ compilation(struct_processus *s_etat_pro if ((*s_etat_processus).erreur_systeme != d_es) { free(s_variable); - return(d_erreur); } @@ -1479,19 +1489,26 @@ recherche_instruction_suivante_recursive pointeur_caractere_courant++; } - if ((*pointeur_caractere_courant) == '>') + if (((*pointeur_caractere_courant) == '>') && + ((*(pointeur_caractere_courant - 1)) == + d_code_espace)) { - if ((*(++pointeur_caractere_courant)) == '>') - { + pointeur_caractere_courant++; + + if ((*pointeur_caractere_courant) == '>') + { // Cas de '>>' drapeau_fin_objet = d_vrai; + pointeur_caractere_courant++; + break; } - else - { + else if ((*pointeur_caractere_courant) != + d_code_espace) + { // Tous les cas différents de '>' erreur_analyse = d_ex_syntaxe; + break; } - pointeur_caractere_courant++; - break; + pointeur_caractere_courant--; } if ((erreur_format == d_absence_erreur) && @@ -1659,7 +1676,7 @@ recherche_instruction_suivante_recursive default: { (*s_etat_processus).erreur_execution = d_ex_syntaxe; - return(d_erreur); +// return(d_erreur); } } } @@ -1689,6 +1706,11 @@ recherche_instruction_suivante_recursive erreur = ((erreur_analyse == d_ex) && (erreur_format == d_ex)) ? d_absence_erreur : d_erreur; (*s_etat_processus).erreur_execution = erreur_analyse; + + if ((*s_etat_processus).erreur_execution == d_ex) + { + (*s_etat_processus).erreur_execution = erreur_format; + } } else {