--- rpl/src/evaluation.c 2014/04/25 07:37:28 1.83 +++ rpl/src/evaluation.c 2015/11/26 11:44:30 1.96 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.18 - Copyright (C) 1989-2014 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.24 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -758,18 +758,8 @@ evaluation(struct_processus *s_etat_proc (*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'; - } + (*s_etat_processus).evaluation_expression_compilee + = 'Y'; analyse(s_etat_processus, (*((struct_fonction *) (*(*l_element_courant).donnee).objet)) @@ -3092,6 +3082,86 @@ evaluation(struct_processus *s_etat_proc instruction_courante; return(d_erreur); } + + // Si l'objet élémentaire est un nom et que ce nom n'est + // pas un nom symbolique, il convient de l'évaluer. + + if ((*s_objet_elementaire).type == NOM) + { + if (((*((struct_nom *) (*s_objet_elementaire) + .objet)).symbole == d_faux) || + (type_evaluation == 'N')) + { + if (evaluation(s_etat_processus, + s_objet_elementaire, 'E') == d_erreur) + { + if (presence_variable_partagee == d_vrai) + { + (*(*s_etat_processus) + .pointeur_variable_courante) + .objet = NULL; + + if (pthread_mutex_unlock( + &((*(*s_etat_processus) + .pointeur_variable_partagee_courante + ).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + } + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + (*s_etat_processus).instruction_courante = + instruction_courante; + return(d_erreur); + } + + liberation(s_etat_processus, + s_objet_elementaire); + + + if (depilement(s_etat_processus, + &((*s_etat_processus).l_base_pile), + &s_objet_elementaire) == d_erreur) + { + if (presence_variable_partagee == d_vrai) + { + (*(*s_etat_processus) + .pointeur_variable_courante) + .objet = NULL; + + if (pthread_mutex_unlock( + &((*(*s_etat_processus) + .pointeur_variable_partagee_courante + ).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + } + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + (*s_etat_processus).instruction_courante = + instruction_courante; + return(d_erreur); + } + } + } } /* @@ -3249,6 +3319,86 @@ evaluation(struct_processus *s_etat_proc instruction_courante; return(d_erreur); } + + // Si l'objet élémentaire est un nom et que ce nom n'est + // pas un nom symbolique, il convient de l'évaluer. + + if ((*s_objet_elementaire).type == NOM) + { + if (((*((struct_nom *) (*s_objet_elementaire) + .objet)).symbole == d_faux) || + (type_evaluation == 'N')) + { + if (evaluation(s_etat_processus, + s_objet_elementaire, 'E') == d_erreur) + { + if (presence_variable_partagee == d_vrai) + { + (*(*s_etat_processus) + .pointeur_variable_courante) + .objet = NULL; + + if (pthread_mutex_unlock( + &((*(*s_etat_processus) + .pointeur_variable_partagee_courante + ).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + } + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + (*s_etat_processus).instruction_courante = + instruction_courante; + return(d_erreur); + } + + liberation(s_etat_processus, + s_objet_elementaire); + + + if (depilement(s_etat_processus, + &((*s_etat_processus).l_base_pile), + &s_objet_elementaire) == d_erreur) + { + if (presence_variable_partagee == d_vrai) + { + (*(*s_etat_processus) + .pointeur_variable_courante) + .objet = NULL; + + if (pthread_mutex_unlock( + &((*(*s_etat_processus) + .pointeur_variable_partagee_courante + ).mutex)) != 0) + { + (*s_etat_processus).erreur_systeme = + d_es_processus; + } + } + + if (presence_egalite == d_vrai) + { + liberation(s_etat_processus, + s_objet_evalue); + } + + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + (*s_etat_processus).instruction_courante = + instruction_courante; + return(d_erreur); + } + } + } } else if (((*((*(*s_etat_processus) .pointeur_variable_courante).objet)).type == ALG) || @@ -3666,7 +3816,7 @@ evaluation(struct_processus *s_etat_proc .evaluation_expression_compilee; (*s_etat_processus).evaluation_expression_compilee - = 'N'; + = 'Y'; if (evaluation(s_etat_processus, (*l_element_courant) .donnee, type_evaluation) == d_erreur)