--- rpl/src/evaluation.c 2012/09/29 17:53:02 1.57 +++ rpl/src/evaluation.c 2012/10/08 11:53:46 1.62 @@ -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. @@ -802,10 +802,30 @@ evaluation(struct_processus *s_etat_proc ((*s_etat_processus).erreur_systeme == d_es) && ((*s_etat_processus).exception == d_ep)) { + registre_evaluation_expression_compilee = + (*s_etat_processus) + .evaluation_expression_compilee; + + if (((*(*s_etat_processus).pointeur_variable_courante) + .origine == 'E') && ((*(*s_etat_processus) + .pointeur_variable_courante).niveau == 0)) + { + (*s_etat_processus).evaluation_expression_compilee + = 'Y'; + } + else + { + (*s_etat_processus).evaluation_expression_compilee + = 'N'; + } + analyse(s_etat_processus, (*((struct_fonction *) (*(*l_element_courant).donnee).objet)) .fonction); + (*s_etat_processus).evaluation_expression_compilee = + registre_evaluation_expression_compilee; + if (type_evaluation == 'I') { (*s_etat_processus).derniere_erreur_evaluation = @@ -956,6 +976,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 +1078,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 +1167,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 +1355,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -1420,9 +1444,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 +1533,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 +1732,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -1802,9 +1829,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 +1918,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 +3966,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 +4068,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 +4157,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 +4386,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -4442,9 +4475,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 +4564,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 +4759,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -4812,9 +4848,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 +4937,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 +5216,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 +5318,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 +5407,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 +5636,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -5683,9 +5725,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 +5814,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 +6009,7 @@ evaluation(struct_processus *s_etat_proc } } else if (TEST(instruction_for) || + TEST(instruction_forall) || TEST(instruction_start)) { empilement_pile_systeme( @@ -6053,9 +6098,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 +6187,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 +7190,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 +7209,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); } /*