--- rpl/src/compilation.c 2015/01/27 14:18:05 1.72 +++ rpl/src/compilation.c 2015/01/28 20:58:02 1.74 @@ -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); } @@ -987,6 +997,7 @@ recherche_instruction_suivante_recursive (drapeau_fin_objet == d_faux) && (erreur_analyse == d_ex) && (erreur_format == d_ex)) { +uprintf("%c", *pointeur_caractere_courant); switch(*pointeur_caractere_courant++) { case ']' : @@ -1629,15 +1640,18 @@ recherche_instruction_suivante_recursive if ((*(pointeur_caractere_courant - 1)) == caractere_fin) { +uprintf(" > cas 1"); // Cas des objets composites (LST, RPN, TBL) break; } else if ((*pointeur_caractere_courant) == caractere_fin) { +uprintf(" > cas 2"); // Condition pour traiter les cas 123} break; } } +uprintf("\n"); pointeur_fin_instruction = pointeur_caractere_courant; @@ -1659,7 +1673,7 @@ recherche_instruction_suivante_recursive default: { (*s_etat_processus).erreur_execution = d_ex_syntaxe; - return(d_erreur); +// return(d_erreur); } } } @@ -1698,6 +1712,7 @@ recherche_instruction_suivante_recursive (*s_etat_processus).position_courante = pointeur_fin_instruction - (*s_etat_processus).definitions_chainees; +uprintf("'%s'\n", (*s_etat_processus).instruction_courante); return(erreur); }