--- rpl/src/evaluation.c 2012/09/29 17:53:02 1.57 +++ rpl/src/evaluation.c 2012/10/07 08:18:35 1.61 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.10 + RPL/2 (R) version 4.1.11 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -956,6 +956,7 @@ evaluation(struct_processus *s_etat_proc registre_erreur_execution; } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -1057,9 +1058,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -1143,9 +1147,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -1332,6 +1335,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -1420,9 +1424,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -1506,9 +1513,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -1706,6 +1712,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -1802,9 +1809,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -1888,9 +1898,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -3937,6 +3946,7 @@ evaluation(struct_processus *s_etat_proc registre_erreur_execution; } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -4038,9 +4048,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -4124,9 +4137,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -4354,6 +4366,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -4442,9 +4455,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -4528,9 +4544,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -4724,6 +4739,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -4812,9 +4828,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -4898,9 +4917,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -5178,6 +5196,7 @@ evaluation(struct_processus *s_etat_proc registre_erreur_execution; } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -5279,9 +5298,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -5365,9 +5387,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -5595,6 +5616,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -5683,9 +5705,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -5769,9 +5794,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -5965,6 +5989,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -6053,9 +6078,12 @@ evaluation(struct_processus *s_etat_proc */ presence_compteur = + (((*(*s_etat_processus) + .l_base_pile_systeme) + .type_cloture == 'F') || ((*(*s_etat_processus) .l_base_pile_systeme) - .type_cloture == 'F') + .type_cloture == 'A')) ? d_vrai : d_faux; if (((*(*s_etat_processus) @@ -6139,9 +6167,8 @@ evaluation(struct_processus *s_etat_proc .niveau_courant--; if ( - retrait_variable_par_niveau( - s_etat_processus) == - d_erreur) + retrait_variables_par_niveau( + s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) @@ -7143,8 +7170,17 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).niveau_courant = niveau_initial; - if (retrait_variable_par_niveau(s_etat_processus) == d_erreur) + if (retrait_variables_par_niveau(s_etat_processus) == d_erreur) { + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, s_objet_evalue); + } + + (*s_etat_processus).instruction_courante = + instruction_courante; + (*s_etat_processus).mode_execution_programme = + registre_mode_execution_programme; return(d_erreur); } } @@ -7153,28 +7189,18 @@ evaluation(struct_processus *s_etat_proc * Retrait des variables statiques créées dans l'expression */ - for(n = 0; n < (*s_etat_processus).nombre_variables_statiques; n++) + if (retrait_variables_statiques_locales(s_etat_processus) == d_erreur) { - if ((*s_etat_processus).s_liste_variables_statiques[n] - .niveau > (*s_etat_processus).niveau_courant) + if (presence_egalite == d_vrai) { - if (retrait_variable_statique(s_etat_processus, - (*s_etat_processus).s_liste_variables_statiques[n].nom, - (*s_etat_processus).s_liste_variables_statiques[n] - .variable_statique) == d_erreur) - { - if (presence_egalite == d_vrai) - { - liberation(s_etat_processus, s_objet_evalue); - } - - (*s_etat_processus).instruction_courante = - instruction_courante; - (*s_etat_processus).mode_execution_programme = - registre_mode_execution_programme; - return(d_erreur); - } + liberation(s_etat_processus, s_objet_evalue); } + + (*s_etat_processus).instruction_courante = + instruction_courante; + (*s_etat_processus).mode_execution_programme = + registre_mode_execution_programme; + return(d_erreur); } /*