--- rpl/src/evaluation.c 2012/10/04 15:21:25 1.60 +++ rpl/src/evaluation.c 2012/10/08 11:53:46 1.62 @@ -585,18 +585,6 @@ evaluation(struct_processus *s_etat_proc } else if (((*s_objet).type == RPN) || ((*s_objet).type == ALG)) { - // Ajout d'un bouchon à la liste des variables statiques pour - // savoir quelles sont les variables statiques qui ont été créées - // par l'évaluation de l'expression et qui sont susceptibles - // de devoir être éliminées. - - if (ajout_bouchon_variable_statique(s_etat_processus) == d_erreur) - { - (*s_etat_processus).instruction_courante = instruction_courante; - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(d_erreur); - } - l_element_courant = (struct_liste_chainee *) (*s_objet).objet; l_element_egalite = NULL; presence_egalite = d_faux; @@ -814,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 = @@ -7201,7 +7209,7 @@ evaluation(struct_processus *s_etat_proc * Retrait des variables statiques créées dans l'expression */ - if (retrait_variables_statiques(s_etat_processus) == d_erreur) + if (retrait_variables_statiques_locales(s_etat_processus) == d_erreur) { if (presence_egalite == d_vrai) {