--- rpl/src/evaluation.c 2013/02/27 17:11:40 1.69 +++ rpl/src/evaluation.c 2013/03/05 16:20:47 1.70 @@ -715,8 +715,10 @@ 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) @@ -5869,379 +5871,6 @@ evaluation(struct_processus *s_etat_proc (*s_etat_processus).instruction_courante = instruction_courante; - (*s_etat_processus).exception = d_ep; - (*s_etat_processus).erreur_execution = d_ex; - - erreur_evaluation = d_erreur; - } - else - { - // On ne détruit pas les variables pour les inclure - // dans le fichier rpl-core. - - (*s_etat_processus).gel_liste_variables = d_vrai; - - registre_erreur_execution = - (*s_etat_processus).erreur_execution; - registre_exception = - (*s_etat_processus).exception; - registre_erreur_systeme = - (*s_etat_processus).erreur_systeme; - - (*s_etat_processus).s_objet_errone = s_objet; - (*s_etat_processus).s_objet_erreur = - (*l_element_courant).donnee; - - l_element_courant = (*l_element_courant).suivant; - - while(l_element_courant != NULL) - { - if ((*(*l_element_courant).donnee).type == FCT) - { - (*s_etat_processus).instruction_courante = - (*((struct_fonction *) - (*(*l_element_courant).donnee) - .objet)).nom_fonction; - fonction = (*((struct_fonction *) - (*(*l_element_courant).donnee) - .objet)).fonction; - - if (recherche_variable(s_etat_processus, - (*s_etat_processus) - .instruction_courante) == d_faux) - { - (*s_etat_processus).erreur_systeme - = d_es; - - /* - * Traitement de la pile système par les - * différentes instructions. - */ - - if (TEST(instruction_if) || - TEST(instruction_iferr) || - TEST(instruction_do) || - TEST(instruction_while) || - TEST(instruction_for) || - TEST(instruction_forall) || - TEST(instruction_start) || - TEST(instruction_select) || - TEST(instruction_case) || - TEST(instruction_critical) || - TEST(vers_niveau_superieur)) - { - if (TEST(vers_niveau_superieur)) - { - analyse(s_etat_processus, - vers_niveau_superieur); - - if ((*s_etat_processus) - .erreur_systeme != d_es) - { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - } - else if (TEST(instruction_for) || - TEST(instruction_forall) || - TEST(instruction_start)) - { - empilement_pile_systeme( - s_etat_processus); - - if ((*s_etat_processus) - .erreur_systeme != d_es) - { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - (*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture = 'L'; - } - else - { - empilement_pile_systeme( - s_etat_processus); - - if ((*s_etat_processus) - .erreur_systeme != d_es) - { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - } - } - else if (TEST(instruction_end) || - TEST(instruction_next) || - TEST(instruction_step) || - TEST(vers_niveau_inferieur)) - { - if (TEST(vers_niveau_inferieur)) - { - analyse(s_etat_processus, - vers_niveau_inferieur); - - if ((*s_etat_processus) - .erreur_systeme != d_es) - { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - } - else if ((TEST(instruction_next) || - TEST(instruction_step)) && - ((*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture != 'L')) - { - /* - * Libération des compteurs - * de boucle - */ - - presence_compteur = - (((*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture == 'F') || - ((*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture == 'A')) - ? d_vrai : d_faux; - - if (((*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture != 'S') && - (presence_compteur == - d_faux)) - { - (*s_etat_processus) - .erreur_execution = - d_ex_erreur_traitement_boucle; - - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - if (presence_compteur == d_vrai) - { - if (recherche_variable( - s_etat_processus, - (*(*s_etat_processus) - .l_base_pile_systeme) - .nom_variable) == - d_faux) - { - (*s_etat_processus) - .erreur_systeme = d_es; - (*s_etat_processus) - .erreur_execution = - d_ex_erreur_traitement_boucle; - - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - if ((*(*s_etat_processus) - .pointeur_variable_courante) - .objet == NULL) - { - (*s_etat_processus) - .erreur_systeme = d_es; - (*s_etat_processus) - .erreur_execution = - d_ex_variable_partagee; - - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - (*s_etat_processus) - .niveau_courant--; - - 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; - return(d_erreur); - } - } - - depilement_pile_systeme( - s_etat_processus); - } - else - { - // Traitement spécifique pour la - // fin d'une section critique - - if ((*s_etat_processus) - .l_base_pile_systeme == - NULL) - { - (*s_etat_processus) - .erreur_systeme = - d_es_end_incoherent; - - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - if ((*(*s_etat_processus) - .l_base_pile_systeme) - .type_cloture == 'Q') - { - if (pthread_mutex_unlock( - &mutex_sections_critiques) - != 0) - { - (*s_etat_processus) - .erreur_systeme = - d_es_processus; - - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - - (*s_etat_processus) - .sections_critiques--; - } - - depilement_pile_systeme( - s_etat_processus); - - if ((*s_etat_processus) - .erreur_systeme != d_es) - { - if (presence_egalite == - d_vrai) - { - liberation( - s_etat_processus, - s_objet_evalue); - } - - (*s_etat_processus) - .instruction_courante = - instruction_courante; - return(d_erreur); - } - } - } - } - } - - l_element_courant = - (*l_element_courant).suivant; - } - - (*s_etat_processus).mode_execution_programme = - registre_mode_execution_programme; - (*s_etat_processus).instruction_courante = - instruction_courante; - if (presence_egalite == d_vrai) { liberation(s_etat_processus, s_objet_evalue); @@ -6544,7 +6173,7 @@ evaluation(struct_processus *s_etat_proc } (*s_etat_processus).evaluation_forcee = - registre_evaluation_forcee; + registre_evaluation_forcee; (*s_etat_processus).instruction_courante = instruction_courante; (*s_etat_processus).mode_execution_programme = 'N'; @@ -6679,18 +6308,18 @@ evaluation(struct_processus *s_etat_proc } } - registre_niveau_courant = (*(*s_etat_processus) - .l_base_pile_systeme).niveau_courant; - registre_retour_definition = - (*(*s_etat_processus) - .l_base_pile_systeme).retour_definition; + empilement_pile_systeme(s_etat_processus); (*(*s_etat_processus).l_base_pile_systeme) .retour_definition = 'Y'; (*(*s_etat_processus).l_base_pile_systeme) .niveau_courant = (*s_etat_processus) .niveau_courant; - empilement_pile_systeme(s_etat_processus); + (*(*s_etat_processus).l_base_pile_systeme) + .pointeur_objet_retour = + l_element_courant; + (*(*s_etat_processus).l_base_pile_systeme) + .origine_routine_evaluation = 'Y'; if (evaluation(s_etat_processus, (*(*s_etat_processus) @@ -6699,13 +6328,6 @@ evaluation(struct_processus *s_etat_proc { depilement_pile_systeme(s_etat_processus); - (*(*s_etat_processus).l_base_pile_systeme) - .niveau_courant = - registre_niveau_courant; - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = - registre_retour_definition; - if ((*s_etat_processus).profilage == d_vrai) { profilage(s_etat_processus, NULL); @@ -6729,13 +6351,6 @@ evaluation(struct_processus *s_etat_proc } depilement_pile_systeme(s_etat_processus); - - (*(*s_etat_processus).l_base_pile_systeme) - .niveau_courant = - registre_niveau_courant; - (*(*s_etat_processus).l_base_pile_systeme) - .retour_definition = - registre_retour_definition; } else {