--- rpl/src/sequenceur.c 2015/01/27 14:18:09 1.85 +++ rpl/src/sequenceur.c 2019/02/09 13:36:43 1.106 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.20 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.31 + Copyright (C) 1989-2019 Dr. BERTRAND Joël This file is part of RPL/2. @@ -134,7 +134,7 @@ sequenceur(struct_processus *s_etat_proc */ action.sa_handler = SIG_IGN; - action.sa_flags = SA_NODEFER | SA_ONSTACK; + action.sa_flags = 0; (*s_etat_processus).execution_pas_suivant = d_faux; (*s_etat_processus).traitement_instruction_halt = d_vrai; @@ -541,6 +541,8 @@ sequenceur(struct_processus *s_etat_proc -------------------------------------------------------------------------------- */ + (*s_etat_processus).instruction_sensible = 'N'; + analyse(s_etat_processus, NULL); if ((*s_etat_processus).traitement_cycle_exit != 'N') @@ -585,42 +587,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) @@ -653,6 +655,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); + } } } @@ -718,6 +742,8 @@ sequenceur(struct_processus *s_etat_proc } } + (*s_etat_processus).debug_programme = d_faux; + (*(*s_etat_processus).l_base_pile_systeme) .adresse_retour = (*s_etat_processus) .position_courante; @@ -806,8 +832,10 @@ sequenceur(struct_processus *s_etat_proc { 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; @@ -909,7 +937,8 @@ sequenceur(struct_processus *s_etat_proc (*((struct_fonction *) (*s_objet).objet)) .nombre_arguments = 0; - if ((*s_etat_processus).instruction_intrinseque == 'Y') + if (((*s_etat_processus).instruction_intrinseque == 'Y') && + ((*s_etat_processus).instruction_sensible == 'N')) { if (((*((struct_fonction *) (*s_objet).objet)) .nom_fonction = conversion_majuscule( @@ -1500,7 +1529,7 @@ sequenceur(struct_processus *s_etat_proc if ((*s_etat_processus).var_volatile_processus_pere == 0) { envoi_signal_processus((*s_etat_processus).pid_processus_pere, - rpl_sigalrm); + rpl_sigalrm, d_faux); } else {