--- rpl/src/evaluation.c 2010/02/10 10:14:19 1.6 +++ rpl/src/evaluation.c 2010/04/21 13:45:44 1.14 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 + RPL/2 (R) version 4.0.15 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -143,6 +143,34 @@ evaluation(struct_processus *s_etat_proc if (recherche_variable(s_etat_processus, (*((struct_nom *) (*s_objet_tampon).objet)).nom) == d_faux) { + (*s_etat_processus).erreur_execution = d_ex; + + if ((*s_etat_processus).autorisation_nom_implicite == 'N') + { + if ((*((struct_nom *) (*s_objet_tampon).objet)).symbole == + d_faux) + { + if (test_cfsf(s_etat_processus, 31) == d_vrai) + { + if (empilement_pile_last(s_etat_processus, 0) + == d_erreur) + { + return(d_erreur); + } + } + + erreur_evaluation = d_erreur; + (*s_etat_processus).erreur_execution = + d_ex_nom_implicite; + + if (type_evaluation == 'I') + { + (*s_etat_processus).derniere_erreur_evaluation = + (*s_etat_processus).erreur_execution; + } + } + } + (*s_etat_processus).erreur_systeme = d_es; presence_variable = d_faux; } @@ -463,10 +491,10 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).evaluation_expression_compilee = registre_evaluation_expression_compilee; } - else + else if ((*s_etat_processus).erreur_execution != d_ex_nom_implicite) { if ((s_objet_tampon = copie_objet(s_etat_processus, - s_objet, 'P')) == NULL) + s_objet, 'Q')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -484,12 +512,6 @@ evaluation(struct_processus *s_etat_proc instruction_courante; return(d_erreur); } - - if ((*s_etat_processus).erreur_execution == - d_ex_variable_non_definie) - { - (*s_etat_processus).erreur_execution = d_ex; - } } } else @@ -4002,7 +4024,7 @@ evaluation(struct_processus *s_etat_proc { /* * La fin de l'expression est atteinte, - * le sequenceur reprend la main. + * le séquenceur reprend la main. */ if (presence_egalite == d_vrai) @@ -4383,6 +4405,35 @@ evaluation(struct_processus *s_etat_proc { (*s_etat_processus).erreur_systeme = d_es; presence_variable = d_faux; + + if ((*s_etat_processus).autorisation_nom_implicite + == 'N') + { + if ((*((struct_nom *) (*s_objet_elementaire).objet)) + .symbole == d_faux) + { + if (test_cfsf(s_etat_processus, 31) == d_vrai) + { + if (empilement_pile_last(s_etat_processus, + 0) == d_erreur) + { + return(d_erreur); + } + } + + erreur_evaluation = d_erreur; + (*s_etat_processus).erreur_execution = + d_ex_nom_implicite; + + if (type_evaluation == 'I') + { + (*s_etat_processus) + .derniere_erreur_evaluation = + (*s_etat_processus) + .erreur_execution; + } + } + } } else { @@ -4765,6 +4816,7 @@ evaluation(struct_processus *s_etat_proc (*(*s_etat_processus).l_base_pile_systeme) .niveau_courant = + registre_niveau_courant; (*(*s_etat_processus).l_base_pile_systeme) .retour_definition = registre_retour_definition; @@ -4795,6 +4847,7 @@ evaluation(struct_processus *s_etat_proc (*(*s_etat_processus).l_base_pile_systeme) .niveau_courant = + registre_niveau_courant; (*(*s_etat_processus).l_base_pile_systeme) .retour_definition = registre_retour_definition; @@ -5076,6 +5129,10 @@ evaluation(struct_processus *s_etat_proc ((*s_etat_processus).erreur_execution != d_ex) || ((*s_etat_processus).exception != d_ep)) { + // Il est anormal de récupérer ici une erreur + // d'exécution puisqu'on empile une constante + // symbolique. + if (presence_egalite == d_vrai) { liberation(s_etat_processus, s_objet_evalue);