--- rpl/src/instructions_f1.c 2015/02/19 11:01:23 1.69 +++ rpl/src/instructions_f1.c 2015/03/25 09:46:03 1.70 @@ -110,7 +110,9 @@ instruction_fleche(struct_processus *s_e printf(" -> (variables) %s\n\n", d_RPN); - printf(" -> (variables) %s\n", d_ALG); + printf(" -> (variables) %s\n\n", d_ALG); + + printf(" -> (variables) %s\n", d_NOM); return; } @@ -746,8 +748,25 @@ instruction_fleche(struct_processus *s_e if (presence_expression_algebrique == d_vrai) { + // Si l'expression algébrique est réduite à un simple nom, il + // s'agit toujours d'un nom symbolique. Il faut alors lui retirer + // son caractère de constante symbolique pour faire remonter les + // erreurs de type 'variable indéfinie'. + + if ((*s_expression_algebrique).type == NOM) + { + (*((struct_nom *) (*s_expression_algebrique).objet)).symbole = + d_faux; + } + evaluation(s_etat_processus, s_expression_algebrique, 'N'); + if ((*s_expression_algebrique).type == NOM) + { + (*((struct_nom *) (*s_expression_algebrique).objet)).symbole = + d_vrai; + } + if ((*s_etat_processus).mode_execution_programme == 'Y') { liberation(s_etat_processus, s_expression_algebrique);