--- rpl/src/evaluation.c 2010/01/27 22:22:10 1.2 +++ rpl/src/evaluation.c 2010/02/10 10:14:19 1.6 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 + RPL/2 (R) version 4.0.11 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -82,6 +82,7 @@ evaluation(struct_processus *s_etat_proc unsigned char *instruction_courante; unsigned char *message; unsigned char registre_evaluation_expression_compilee; + unsigned char registre_evaluation_forcee; unsigned char registre_instruction_valide; unsigned char registre_mode_execution_programme; unsigned char registre_retour_definition; @@ -327,8 +328,18 @@ evaluation(struct_processus *s_etat_proc } } + registre_evaluation_forcee = + (*s_etat_processus).evaluation_forcee; + + if (type_evaluation == 'N') + { + (*s_etat_processus).evaluation_forcee = 'Y'; + } + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; (*s_etat_processus).instruction_courante = @@ -336,6 +347,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = 'N'; @@ -2846,8 +2859,19 @@ evaluation(struct_processus *s_etat_proc } } + registre_evaluation_forcee = + (*s_etat_processus).evaluation_forcee; + + if (type_evaluation == 'N') + { + (*s_etat_processus).evaluation_forcee = 'Y'; + } + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; + if (presence_variable_partagee == d_vrai) { (*s_etat_processus).s_liste_variables @@ -2876,6 +2900,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = 'N'; @@ -3145,8 +3171,29 @@ evaluation(struct_processus *s_etat_proc registre_test_2 = (*s_etat_processus).test_instruction; (*s_etat_processus).test_instruction = 'N'; + registre_type_evaluation = (test_cfsf(s_etat_processus, 35) + == d_vrai) ? 'E' : 'N'; + + if (type_evaluation == 'N') + { + cf(s_etat_processus, 35); + } + else + { + sf(s_etat_processus, 35); + } + analyse(s_etat_processus, NULL); + if (registre_type_evaluation == 'E') + { + sf(s_etat_processus, 35); + } + else + { + cf(s_etat_processus, 35); + } + (*s_etat_processus).test_instruction = registre_test_2; if ((*s_etat_processus).erreur_systeme != d_es) @@ -3558,9 +3605,6 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).erreur_execution = d_ex; erreur_evaluation = d_erreur; - - (*s_etat_processus).expression_courante = - registre_expression_courante; } else { @@ -4142,9 +4186,6 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).erreur_execution = d_ex; erreur_evaluation = d_erreur; - - (*s_etat_processus).expression_courante = - registre_expression_courante; } else { @@ -4538,8 +4579,19 @@ evaluation(struct_processus *s_etat_proc } } + registre_evaluation_forcee = + (*s_etat_processus).evaluation_forcee; + + if (type_evaluation == 'N') + { + (*s_etat_processus).evaluation_forcee = 'Y'; + } + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; + if (presence_egalite == d_vrai) { liberation(s_etat_processus, s_objet_evalue); @@ -4552,6 +4604,8 @@ evaluation(struct_processus *s_etat_proc return(d_erreur); } + (*s_etat_processus).evaluation_forcee = + registre_evaluation_forcee; (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = 'N';