--- rpl/src/evaluation.c 2010/01/27 22:22:10 1.2 +++ rpl/src/evaluation.c 2010/04/07 13:33:22 1.9 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 + RPL/2 (R) version 4.0.13 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; @@ -142,6 +143,17 @@ evaluation(struct_processus *s_etat_proc if (recherche_variable(s_etat_processus, (*((struct_nom *) (*s_objet_tampon).objet)).nom) == d_faux) { + if ((*s_etat_processus).autorisation_nom_implicite == 'N') + { + if ((*((struct_nom *) (*s_objet_tampon).objet)).symbole == + d_faux) + { + (*s_etat_processus).erreur_execution = + d_ex_manque_argument; + return(d_erreur); + } + } + (*s_etat_processus).erreur_systeme = d_es; presence_variable = d_faux; } @@ -327,8 +339,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 +358,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 +2870,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 +2911,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 +3182,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 +3616,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 +4197,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 { @@ -4340,6 +4392,18 @@ evaluation(struct_processus *s_etat_proc if (recherche_variable(s_etat_processus, (*((struct_nom *) (*s_objet_elementaire).objet)).nom) == d_faux) { + if ((*s_etat_processus).autorisation_nom_implicite + == 'N') + { + if ((*((struct_nom *) (*s_objet_elementaire).objet)) + .symbole == d_faux) + { + (*s_etat_processus).erreur_systeme = + d_es_nom_implicite; + return(d_erreur); + } + } + (*s_etat_processus).erreur_systeme = d_es; presence_variable = d_faux; } @@ -4538,8 +4602,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 +4627,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';