--- rpl/src/sequenceur.c 2012/10/04 15:21:26 1.59 +++ rpl/src/sequenceur.c 2012/10/08 12:27:38 1.60 @@ -25,13 +25,13 @@ /* ================================================================================ - Boucle principale de l'interprète RPL/2 + Boucle principale de l'interprète RPL/2 ================================================================================ - Entrées : structure sur l'état du processus + Entrées : structure sur l'état du processus -------------------------------------------------------------------------------- - Sorties : Néant + Sorties : néant -------------------------------------------------------------------------------- - Effets de bord : néant + Effets de bord : néant ================================================================================ */ @@ -106,7 +106,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Boucle de l'interprète RPL/2 + Boucle de l'interprète RPL/2 On boucle tant qu'on n'a pas une bonne raison de sortir... -------------------------------------------------------------------------------- */ @@ -117,7 +117,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Recherche de l'instruction suivante dans les définitions chaînées + Recherche de l'instruction suivante dans les définitions chaînées -------------------------------------------------------------------------------- */ @@ -517,8 +517,8 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Dans le cas où une instruction est retournée, celle-ci est évaluée. Dans le - cas contraire, l'interprète renvoie un message d'erreur et s'interrompt. + Dans le cas où une instruction est retournée, celle-ci est évaluée. Dans le + cas contraire, l'interprète renvoie un message d'erreur et s'interrompt. -------------------------------------------------------------------------------- */ @@ -527,8 +527,8 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Scrutation des mots clef du langage RPL/2 et exécution le cas échéant - de l'action associée. + Scrutation des mots clef du langage RPL/2 et exécution le cas échéant + de l'action associée. -------------------------------------------------------------------------------- */ @@ -557,7 +557,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - L'instruction ne correspond pas à l'un des mots clef du langage RPL/2. + L'instruction ne correspond pas à l'un des mots clef du langage RPL/2. -------------------------------------------------------------------------------- */ @@ -572,7 +572,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - L'instruction est une variable partagée + L'instruction est une variable partagée -------------------------------------------------------------------------------- */ @@ -582,8 +582,8 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).langue == 'F') { - printf("[%d] Empilement de la variable " - "partagée %s de type %d\n", + printf("[%d] Évaluation de la variable " + "partagée %s de type %d\n", (int) getpid(), (*s_etat_processus) .instruction_courante, (*(*(*s_etat_processus) @@ -643,21 +643,19 @@ sequenceur(struct_processus *s_etat_proc return(d_erreur); } - if (empilement(s_etat_processus, - &((*s_etat_processus).l_base_pile), - s_objet) == d_erreur) + if (evaluation(s_etat_processus, s_objet, 'E') + == d_erreur) { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; + liberation(s_etat_processus, s_objet); return(d_erreur); } + + liberation(s_etat_processus, s_objet); } else { // La variable n'existe plus. - (*s_etat_processus).erreur_systeme = d_es; - if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -666,14 +664,12 @@ sequenceur(struct_processus *s_etat_proc d_es_processus; return(d_erreur); } - - recherche_type(s_etat_processus); } } /* -------------------------------------------------------------------------------- - L'instruction est une variable automatique (évaluation lors de l'empilement). + L'instruction est une variable automatique (évaluation lors de l'empilement). -------------------------------------------------------------------------------- */ @@ -684,7 +680,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- L'instruction est une variable de type 'adresse' pointant sur une - définition. Un branchement est effectué à cette adresse. + définition. Un branchement est effectué à cette adresse. -------------------------------------------------------------------------------- */ @@ -694,8 +690,8 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).langue == 'F') { - printf("[%d] Branchement à la" - " définition %s\n", (int) getpid(), + printf("[%d] Branchement à la" + " définition %s\n", (int) getpid(), (*s_etat_processus) .instruction_courante); } @@ -761,7 +757,7 @@ sequenceur(struct_processus *s_etat_proc { if ((*s_etat_processus).langue == 'F') { - printf("[%d] Empilement de la variable " + printf("[%d] Évaluation de la variable " "%s de type %d\n", (int) getpid(), (*s_etat_processus) @@ -794,14 +790,14 @@ sequenceur(struct_processus *s_etat_proc return(d_erreur); } - if (empilement(s_etat_processus, - &((*s_etat_processus).l_base_pile), - s_objet) == d_erreur) + if (evaluation(s_etat_processus, s_objet, 'E') + == d_erreur) { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; + liberation(s_etat_processus, s_objet); return(d_erreur); } + + liberation(s_etat_processus, s_objet); } } else @@ -809,7 +805,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - L'instruction est une donnée à empiler. + L'instruction est une donnée à empiler. -------------------------------------------------------------------------------- */ @@ -837,10 +833,10 @@ sequenceur(struct_processus *s_etat_proc (*s_etat_processus).erreur_execution = d_ex_nom_implicite; - // Si le niveau de récursivité est non nul, on + // Si le niveau de récursivité est non nul, on // arrive ici depuis la fonction - // recherche_type(). On retourne à cette - // dernière en indiquant une erreur. + // recherche_type(). On retourne à cette + // dernière en indiquant une erreur. if ((*s_etat_processus).niveau_recursivite != 0) { @@ -852,7 +848,7 @@ sequenceur(struct_processus *s_etat_proc } } - // Le séquenceur est appelé depuis la routine d'évaluation + // Le séquenceur est appelé depuis la routine d'évaluation if ((*s_etat_processus).evaluation_forcee == 'Y') { @@ -877,7 +873,7 @@ sequenceur(struct_processus *s_etat_proc liberation(s_etat_processus, s_objet_evaluation); } - // Le séquenceur est appelé depuis la routine de + // Le séquenceur est appelé depuis la routine de // recherche de type else if ((*s_etat_processus).recherche_type == 'Y') @@ -1001,7 +997,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Traitement des arrêts simples + Traitement des arrêts simples -------------------------------------------------------------------------------- */ @@ -1039,7 +1035,7 @@ sequenceur(struct_processus *s_etat_proc /* * On ne sort pas du debugger en cas d'une erreur sur un programme - * en cours de débogage. + * en cours de débogage. */ if ((((*s_etat_processus).erreur_execution != d_ex) || @@ -1095,7 +1091,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Test de fin d'exécution du programme RPL/2 + Test de fin d'exécution du programme RPL/2 -------------------------------------------------------------------------------- */ @@ -1174,7 +1170,7 @@ sequenceur(struct_processus *s_etat_proc if ((*(*s_etat_processus).pointeur_variable_courante) .objet == NULL) { - // Variable partagée + // Variable partagée } else if ((*(*(*s_etat_processus) .pointeur_variable_courante).objet).type == ADR) @@ -1221,8 +1217,8 @@ sequenceur(struct_processus *s_etat_proc } /* - * Traitement de la pile système par les - * différentes instructions. + * Traitement de la pile système par les + * différentes instructions. */ if ((strcmp(instruction_majuscule, "IF") == 0) || @@ -1296,7 +1292,7 @@ sequenceur(struct_processus *s_etat_proc .l_base_pile_systeme).type_cloture != 'L')) { /* - * Libération des compteurs de boucle. + * Libération des compteurs de boucle. */ presence_compteur = (((*(*s_etat_processus) @@ -1347,7 +1343,7 @@ sequenceur(struct_processus *s_etat_proc } else { - // Traitement spécifique pour la fin + // Traitement spécifique pour la fin // d'une section critique if ((*s_etat_processus).l_base_pile_systeme @@ -1462,7 +1458,7 @@ sequenceur(struct_processus *s_etat_proc /* -------------------------------------------------------------------------------- - Messages d'erreur à afficher le cas échéant + Messages d'erreur à afficher le cas échéant -------------------------------------------------------------------------------- */