--- rpl/src/sequenceur.c 2014/04/25 07:37:35 1.80 +++ rpl/src/sequenceur.c 2015/11/26 11:44:43 1.92 @@ -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. @@ -197,12 +197,6 @@ sequenceur(struct_processus *s_etat_proc funlockfile(stdin); funlockfile(stdout); - if ((*s_etat_processus).var_volatile_requete_arret != 0) - { - (*s_etat_processus).requete_arret = 'Y'; - break; - } - if (ligne != NULL) { if ((t_ligne = transliteration(s_etat_processus, ligne, @@ -216,7 +210,7 @@ sequenceur(struct_processus *s_etat_proc free(ligne); ligne = t_ligne; - if ((ligne = compactage(ligne)) == NULL) + if ((ligne = compactage(s_etat_processus, ligne)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -265,6 +259,13 @@ sequenceur(struct_processus *s_etat_proc sprintf(ligne, "dup"); } + if ((*s_etat_processus).var_volatile_requete_arret != 0) + { + free(ligne); + (*s_etat_processus).requete_arret = 'Y'; + break; + } + add_history(ligne); stifle_history(ds_longueur_historique); @@ -295,6 +296,7 @@ sequenceur(struct_processus *s_etat_proc tampon = (*s_etat_processus).instruction_courante; (*s_etat_processus).instruction_courante = ligne; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); (*s_etat_processus).instruction_courante = tampon; @@ -583,42 +585,42 @@ sequenceur(struct_processus *s_etat_proc -------------------------------------------------------------------------------- */ - if ((*s_etat_processus).debug == d_vrai) - if (((*s_etat_processus).type_debug & - d_debug_variables) != 0) + if (recherche_variable_partagee(s_etat_processus, + (*(*s_etat_processus) + .pointeur_variable_courante).nom, + (*(*s_etat_processus) + .pointeur_variable_courante).variable_partagee, + 'P') != NULL) { - if ((*s_etat_processus).langue == 'F') + // La variable existe. + + if ((*s_etat_processus).debug == d_vrai) + if (((*s_etat_processus).type_debug & + d_debug_variables) != 0) { - printf("[%d] Évaluation de la variable " + if ((*s_etat_processus).langue == 'F') + { + printf("[%d] Évaluation de la variable " "partagée %s de type %d\n", (int) getpid(), (*s_etat_processus) .instruction_courante, (*(*(*s_etat_processus) - .pointeur_variable_courante).objet) - .type); - } - else - { - printf("[%d] Pushing %s as %d type shared " + .pointeur_variable_partagee_courante) + .objet).type); + } + else + { + printf("[%d] Pushing %s as %d type shared " "variable\n", (int) getpid(), (*s_etat_processus) .instruction_courante, (*(*(*s_etat_processus) - .pointeur_variable_courante).objet) - .type); - } - - fflush(stdout); - } + .pointeur_variable_partagee_courante) + .objet).type); + } - if (recherche_variable_partagee(s_etat_processus, - (*(*s_etat_processus) - .pointeur_variable_courante).nom, - (*(*s_etat_processus) - .pointeur_variable_courante).variable_partagee, - 'P') != NULL) - { - // La variable existe. + fflush(stdout); + } if ((s_objet = copie_objet(s_etat_processus, (*(*s_etat_processus) @@ -651,6 +653,28 @@ sequenceur(struct_processus *s_etat_proc else { // La variable n'existe plus. + if ((*s_etat_processus).debug == d_vrai) + if (((*s_etat_processus).type_debug & + d_debug_variables) != 0) + { + if ((*s_etat_processus).langue == 'F') + { + printf("[%d] Tentative d'accès à la " + "variable partagée non définie %s\n", + (int) getpid(), (*s_etat_processus) + .instruction_courante); + } + else + { + printf("[%d] Trying to access to undefined " + "shared variable %s\n", + (int) getpid(), + (*s_etat_processus) + .instruction_courante); + } + + fflush(stdout); + } } } @@ -797,14 +821,17 @@ sequenceur(struct_processus *s_etat_proc */ (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); if ((*s_etat_processus).autorisation_nom_implicite == 'N') { if ((*s_etat_processus).l_base_pile == NULL) { - if ((*s_etat_processus).erreur_execution != - d_ex_nom_implicite) + if (((*s_etat_processus).erreur_execution != + d_ex_nom_implicite) && + ((*s_etat_processus).erreur_execution != + d_ex_syntaxe)) { (*s_etat_processus).erreur_execution = d_ex_manque_argument; @@ -884,7 +911,8 @@ sequenceur(struct_processus *s_etat_proc */ if ((instruction_majuscule = conversion_majuscule( - (*s_etat_processus).instruction_courante)) == NULL) + s_etat_processus, (*s_etat_processus) + .instruction_courante)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -909,8 +937,8 @@ sequenceur(struct_processus *s_etat_proc { if (((*((struct_fonction *) (*s_objet).objet)) .nom_fonction = conversion_majuscule( - (*s_etat_processus).instruction_courante)) - == NULL) + s_etat_processus, (*s_etat_processus) + .instruction_courante)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1195,7 +1223,8 @@ sequenceur(struct_processus *s_etat_proc { (*s_etat_processus).erreur_systeme = d_es; instruction_majuscule = conversion_majuscule( - (*s_etat_processus).instruction_courante); + s_etat_processus, (*s_etat_processus) + .instruction_courante); if (instruction_majuscule == NULL) { @@ -1383,6 +1412,7 @@ sequenceur(struct_processus *s_etat_proc } instruction_majuscule = conversion_majuscule( + s_etat_processus, (*s_etat_processus).instruction_courante); if (instruction_majuscule == NULL)