--- rpl/src/evaluation.c 2010/06/24 10:10:40 1.20 +++ rpl/src/evaluation.c 2011/04/11 13:02:14 1.32.2.1 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.17 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.22 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" #define TEST(instruction) (fonction == instruction) #define vers_niveau_inferieur instruction_vers_niveau_inferieur @@ -771,6 +771,8 @@ evaluation(struct_processus *s_etat_proc registre_retour_definition = (*(*s_etat_processus).l_base_pile_systeme) .retour_definition; (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'N'; + (*(*s_etat_processus).l_base_pile_systeme).pointeur_adresse_retour = + s_objet; l_element_courant = (struct_liste_chainee *) (*s_objet).objet; autorisation_empilement_programme = (*s_etat_processus) @@ -1161,23 +1163,23 @@ evaluation(struct_processus *s_etat_proc { depilement_pile_systeme( s_etat_processus); + } - if ((*s_etat_processus) - .erreur_systeme != d_es) + if ((*s_etat_processus) + .erreur_systeme != d_es) + { + if (presence_egalite == + d_vrai) { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); + liberation( + s_etat_processus, + s_objet_evalue); } + + (*s_etat_processus) + .instruction_courante = + instruction_courante; + return(d_erreur); } } } @@ -5470,16 +5472,27 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).instruction_courante = (*((struct_fonction *) (*s_objet).objet)).nom_fonction; + registre_type_evaluation = (test_cfsf(s_etat_processus, 35) == d_vrai) + ? 'E' : 'N'; + cf(s_etat_processus, 35); + analyse(s_etat_processus, (*((struct_fonction *) (*s_objet).objet)).fonction); - (*s_etat_processus).instruction_courante = instruction_courante; + if (registre_type_evaluation == 'E') + { + sf(s_etat_processus, 35); + } + else + { + cf(s_etat_processus, 35); + } + if (((*s_etat_processus).erreur_systeme != d_es) || ((*s_etat_processus).erreur_execution != d_ex) || ((*s_etat_processus).exception != d_ep)) { - (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; return(d_erreur); @@ -5487,18 +5500,18 @@ evaluation(struct_processus *s_etat_proc } else { + (*s_etat_processus).instruction_courante = instruction_courante; + if ((s_objet_tampon = copie_objet(s_etat_processus, s_objet, 'P')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - (*s_etat_processus).instruction_courante = instruction_courante; return(d_erreur); } if (empilement(s_etat_processus, &((*s_etat_processus) .l_base_pile), s_objet_tampon) == d_erreur) { - (*s_etat_processus).instruction_courante = instruction_courante; return(d_erreur); } }