--- rpl/src/instructions_f1.c 2015/02/01 09:47:18 1.68 +++ rpl/src/instructions_f1.c 2021/03/13 12:50:43 1.86 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.20 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.33 + Copyright (C) 1989-2021 Dr. BERTRAND Joël This file is part of RPL/2. @@ -85,19 +85,19 @@ instruction_fleche(struct_processus *s_e " %s, %s, %s, %s, %s,\n" " %s, %s, %s, %s, %s,\n" " %s, %s, %s, %s,\n" - " %s, %s\n", + " %s, %s, %s\n", d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX, d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK, - d_SQL, d_SLB, d_PRC, d_MTX); + d_SQL, d_SLB, d_PRC, d_MTX, d_REC); printf(" ...\n"); printf(" 1: %s, %s, %s, %s, %s, %s,\n" " %s, %s, %s, %s, %s,\n" " %s, %s, %s, %s, %s,\n" " %s, %s, %s, %s,\n" - " %s, %s\n", + " %s, %s, %s\n", d_INT, d_REL, d_CPL, d_VIN, d_VRL, d_VCX, d_MIN, d_MRL, d_MCX, d_TAB, d_BIN, d_NOM, d_CHN, d_LST, d_ALG, d_RPN, d_FCH, d_SCK, - d_SQL, d_SLB, d_PRC, d_MTX); + d_SQL, d_SLB, d_PRC, d_MTX, d_REC); if ((*s_etat_processus).langue == 'F') { @@ -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);