--- rpl/src/instructions_s1.c 2010/09/23 15:27:40 1.21 +++ rpl/src/instructions_s1.c 2011/06/20 17:54:19 1.28 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.20 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.1 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -2773,8 +2773,8 @@ instruction_step(struct_processus *s_eta return; } - if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).variable_verrouillee == d_vrai) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { liberation(s_etat_processus, s_objet); @@ -2782,8 +2782,7 @@ instruction_step(struct_processus *s_eta return; } - if (((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) { liberation(s_etat_processus, s_objet); @@ -2792,8 +2791,7 @@ instruction_step(struct_processus *s_eta } (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = - ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet; + (*(*s_etat_processus).pointeur_variable_courante).objet; } /* @@ -2834,8 +2832,7 @@ instruction_step(struct_processus *s_eta */ (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL; - ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).objet = s_objet; + (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet; } else { @@ -3210,8 +3207,8 @@ instruction_sto(struct_processus *s_etat * La variable est accessible. */ - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_verrouillee == d_vrai) + if ((*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee == d_vrai) { liberation(s_etat_processus, s_objet_1); liberation(s_etat_processus, s_objet_2); @@ -3220,8 +3217,7 @@ instruction_sto(struct_processus *s_etat return; } - if ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet == NULL) + if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) { if (pthread_mutex_lock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -3231,12 +3227,10 @@ instruction_sto(struct_processus *s_etat } if (recherche_variable_partagee(s_etat_processus, - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].nom, - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].variable_partagee, - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].origine) == d_faux) + (*(*s_etat_processus).pointeur_variable_courante).nom, + (*(*s_etat_processus).pointeur_variable_courante) + .variable_partagee, (*(*s_etat_processus) + .pointeur_variable_courante).origine) == d_faux) { if (pthread_mutex_unlock(&((*(*s_etat_processus) .s_liste_variables_partagees).mutex)) != 0) @@ -3245,6 +3239,17 @@ instruction_sto(struct_processus *s_etat return; } + if ((*s_etat_processus).autorisation_nom_implicite == 'N') + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); + + (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).erreur_execution = + d_ex_creation_variable_globale; + return; + } + if ((s_variable.nom = malloc((strlen((*((struct_nom *) (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char))) == NULL) @@ -3295,12 +3300,24 @@ instruction_sto(struct_processus *s_etat } else { - liberation(s_etat_processus, - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet); + if ((*s_etat_processus).autorisation_nom_implicite == 'N') + { + if ((*(*s_etat_processus).pointeur_variable_courante) + .niveau == 1) + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); - (*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet = s_objet_2; + (*s_etat_processus).erreur_execution = + d_ex_creation_variable_globale; + return; + } + } + + liberation(s_etat_processus, + (*(*s_etat_processus).pointeur_variable_courante).objet); + (*(*s_etat_processus).pointeur_variable_courante).objet = + s_objet_2; } } else @@ -3310,6 +3327,17 @@ instruction_sto(struct_processus *s_etat * une variable globale. */ + if ((*s_etat_processus).autorisation_nom_implicite == 'N') + { + liberation(s_etat_processus, s_objet_1); + liberation(s_etat_processus, s_objet_2); + + (*s_etat_processus).erreur_systeme = d_es; + (*s_etat_processus).erreur_execution = + d_ex_creation_variable_globale; + return; + } + if ((s_variable.nom = malloc((strlen((*((struct_nom *) (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char))) == NULL)