--- rpl/src/instructions_v1.c 2010/03/09 10:18:49 1.5 +++ rpl/src/instructions_v1.c 2019/01/01 09:03:12 1.76 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.13 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.30 + Copyright (C) 1989-2019 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -38,15 +38,11 @@ void instruction_var(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_objet *s_objet_statistique; struct_objet *s_objet_resultat; struct_objet *s_objet_temporaire; - unsigned long nombre_colonnes; + integer8 nombre_colonnes; (*s_etat_processus).erreur_execution = d_ex; @@ -85,74 +81,39 @@ instruction_var(struct_processus *s_etat * Recherche d'une variable globale référencée par SIGMA */ - if (recherche_variable(s_etat_processus, ds_sdat) == d_faux) + if (recherche_variable_globale(s_etat_processus, ds_sdat) == d_faux) { /* * Aucune variable SIGMA */ (*s_etat_processus).erreur_systeme = d_es; - (*s_etat_processus).erreur_execution = d_ex_absence_observations; - return; - } - else - { - /* - * Il existe une variable locale SIGMA. Reste à vérifier l'existence - * d'une variable SIGMA globale... - */ - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) + if ((*s_etat_processus).erreur_execution == d_ex) { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, - ds_sdat) == 0) && ((*s_etat_processus) - .s_liste_variables[i].niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; + (*s_etat_processus).erreur_execution = d_ex_absence_observations; } - if (presence_variable == d_faux) + return; + } + else + { + if (((*(*(*s_etat_processus).pointeur_variable_courante).objet) + .type != MIN) && ((*(*(*s_etat_processus) + .pointeur_variable_courante).objet).type != MRL)) { - (*s_etat_processus).erreur_execution = d_ex_absence_observations; + (*s_etat_processus).erreur_execution = + d_ex_matrice_statistique_invalide; return; } - else - { - (*s_etat_processus).position_variable_courante = i; - - if ((*s_etat_processus).s_liste_variables[i].objet == NULL) - { - (*s_etat_processus).erreur_execution = d_ex_variable_partagee; - return; - } - - if (((*((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante].objet)) - .type != MIN) && ((*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).type != MRL)) - { - (*s_etat_processus).erreur_execution = - d_ex_matrice_statistique_invalide; - return; - } - nombre_colonnes = (*((struct_matrice *) (*((*s_etat_processus) - .s_liste_variables[(*s_etat_processus) - .position_variable_courante].objet)).objet)) - .nombre_colonnes; - } + nombre_colonnes = (*((struct_matrice *) (*(*(*s_etat_processus) + .pointeur_variable_courante).objet).objet)) + .nombre_colonnes; } - s_objet_statistique = ((*s_etat_processus).s_liste_variables - [(*s_etat_processus).position_variable_courante]).objet; + s_objet_statistique = (*(*s_etat_processus).pointeur_variable_courante) + .objet; if (((*s_objet_statistique).type == MIN) || ((*s_objet_statistique).type == MRL)) @@ -171,8 +132,8 @@ instruction_var(struct_processus *s_etat return; } - if (((*s_objet_resultat).objet = variance_statistique((struct_matrice *) - (*s_objet_statistique).objet, 'E')) == NULL) + if (((*s_objet_resultat).objet = variance_statistique(s_etat_processus, + (struct_matrice *) (*s_objet_statistique).objet, 'E')) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -276,6 +237,7 @@ instruction_version(struct_processus *s_ struct_objet *s_objet_resultat; unsigned char texte[] = "RPL/2 version "; + unsigned char tampon[256 + 1]; (*s_etat_processus).erreur_execution = d_ex; @@ -538,16 +500,13 @@ instruction_version(struct_processus *s_ return; } - if (((*(*l_element_courant).donnee).objet = malloc((strlen(d_date_en_rpl) - + 1) * sizeof(unsigned char))) == NULL) + if (((*(*l_element_courant).donnee).objet = + date_compilation(s_etat_processus)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - strcpy((unsigned char *) (*(*l_element_courant).donnee).objet, - d_date_en_rpl); - /* * Ajout des options de compilation */ @@ -869,8 +828,8 @@ instruction_version(struct_processus *s_ return; } -#ifdef DEBUG - if (((*(*l_element_courant).donnee).objet = malloc(6 * +#ifdef RPLCAS + if (((*(*l_element_courant).donnee).objet = malloc(8 * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -878,9 +837,9 @@ instruction_version(struct_processus *s_ } strcpy((unsigned char *) (*(*l_element_courant).donnee).objet, - "DEBUG"); + "RPL/CAS"); #else - if (((*(*l_element_courant).donnee).objet = malloc(15 * + if (((*(*l_element_courant).donnee).objet = malloc(17 * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -888,7 +847,7 @@ instruction_version(struct_processus *s_ } strcpy((unsigned char *) (*(*l_element_courant).donnee).objet, - "DEBUG DISABLED"); + "RPL/CAS DISABLED"); #endif if (((*l_element_courant).suivant = @@ -930,6 +889,58 @@ instruction_version(struct_processus *s_ "EXPERIMENTAL CODE DISABLED"); #endif + if (((*l_element_courant).suivant = + allocation_maillon(s_etat_processus)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + l_element_courant = (*l_element_courant).suivant; + (*l_element_courant).suivant = NULL; + + if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN)) + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + sprintf(tampon, "%zu BITS ABI", sizeof(void *) * 8); + + if (((*(*l_element_courant).donnee).objet = malloc((strlen(tampon) + 1 ) + * sizeof(unsigned char))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + strcpy((unsigned char *) (*(*l_element_courant).donnee).objet, tampon); + + if (((*l_element_courant).suivant = + allocation_maillon(s_etat_processus)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + l_element_courant = (*l_element_courant).suivant; + (*l_element_courant).suivant = NULL; + + if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN)) + == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + if (((*(*l_element_courant).donnee).objet = conversion_majuscule( + s_etat_processus, HOST)) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + /* * Empilement du résultat */ @@ -959,6 +970,9 @@ instruction_version(struct_processus *s_ void instruction_vars(struct_processus *s_etat_processus) { + integer8 i; + integer8 nb_variables; + logical1 variable_partagee; struct_liste_chainee *l_element_courant; @@ -966,7 +980,7 @@ instruction_vars(struct_processus *s_eta struct_objet *s_objet_resultat; - unsigned long i; + struct_tableau_variables *tableau; (*s_etat_processus).erreur_execution = d_ex; @@ -1010,7 +1024,20 @@ instruction_vars(struct_processus *s_eta (*s_objet_resultat).objet = NULL; l_element_precedent = NULL; - for(i = 0; i < (*s_etat_processus).nombre_variables; i++) + nb_variables = nombre_variables(s_etat_processus); + + if ((tableau = malloc(((size_t) nb_variables) * + sizeof(struct_tableau_variables))) == NULL) + { + liberation_mutexes_arbre_variables_partagees(s_etat_processus, + (*(*s_etat_processus).s_arbre_variables_partagees)); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + nb_variables = liste_variables(s_etat_processus, tableau); + + for(i = 0; i < nb_variables; i++) { if (l_element_precedent == NULL) { @@ -1060,30 +1087,13 @@ instruction_vars(struct_processus *s_eta * Mise en place d'un verrou si la variable est partagée. */ - if ((*s_etat_processus).s_liste_variables[i].objet == NULL) + if (tableau[i].objet == NULL) { - if (pthread_mutex_lock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - if (recherche_variable_partagee(s_etat_processus, - ((*s_etat_processus).s_liste_variables[i]).nom, - ((*s_etat_processus).s_liste_variables[i]) - .variable_partagee, ((*s_etat_processus) - .s_liste_variables[i]).origine) == d_faux) + tableau[i].nom, tableau[i].variable_partagee, + tableau[i].origine) == NULL) { // La variable partagée n'existe plus. - - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - continue; } @@ -1105,13 +1115,19 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1122,27 +1138,32 @@ instruction_vars(struct_processus *s_eta if (((*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).donnee).objet)).nom = - malloc((strlen((*s_etat_processus).s_liste_variables[i].nom) + malloc((strlen(tableau[i].nom) + 1) * sizeof(unsigned char))) == NULL) { if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } strcpy((*((struct_nom *) (*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)) - .donnee).objet)).nom, (*s_etat_processus) - .s_liste_variables[i].nom); + .donnee).objet)).nom, tableau[i].nom); /* * Préparation du niveau @@ -1155,13 +1176,19 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1173,20 +1200,26 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } (*((integer8 *) (*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).donnee).objet)) = - (integer8) (*s_etat_processus).s_liste_variables[i].niveau; + (integer8) tableau[i].niveau; /* * Préparation du contenu de la variable @@ -1199,43 +1232,61 @@ instruction_vars(struct_processus *s_eta if (variable_partagee == d_vrai) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if ((*s_etat_processus).s_liste_variables[i].objet == NULL) + if (tableau[i].objet == NULL) { // Variable partagée if (((*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) .donnee = copie_objet(s_etat_processus, - (*(*s_etat_processus) - .s_liste_variables_partagees).table[(*(*s_etat_processus) - .s_liste_variables_partagees).position_variable].objet, - 'P')) == NULL) + (*(*s_etat_processus).pointeur_variable_partagee_courante) + .objet, 'P')) == NULL) { if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } if (pthread_mutex_unlock(&((*(*s_etat_processus) - .s_liste_variables_partagees).mutex)) != 0) + .pointeur_variable_partagee_courante).mutex)) != 0) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -1246,9 +1297,16 @@ instruction_vars(struct_processus *s_eta if (((*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) - .donnee = copie_objet(s_etat_processus, (*s_etat_processus) - .s_liste_variables[i].objet, 'P')) == NULL) + .donnee = copie_objet(s_etat_processus, tableau[i].objet, + 'P')) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1262,6 +1320,12 @@ instruction_vars(struct_processus *s_eta (*l_element_courant).donnee)).objet)).suivant).suivant) .suivant = allocation_maillon(s_etat_processus)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1270,28 +1334,50 @@ instruction_vars(struct_processus *s_eta (*l_element_courant).donnee)).objet)).suivant).suivant).suivant) .donnee = allocation(s_etat_processus, CHN)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if (((*s_etat_processus).s_liste_variables[i].origine == 'P') - ? ((*s_etat_processus).s_liste_variables[i] - .variable_statique.adresse != 0) - : ((*s_etat_processus).s_liste_variables[i] - .variable_statique.pointeur != NULL)) + if ((tableau[i].origine == 'P') + ? (tableau[i].variable_statique.adresse != 0) + : (tableau[i].variable_statique.pointeur != NULL)) { if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) .suivant).donnee).objet = malloc(7 * sizeof(unsigned char))) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) - (*((struct_objet *) (*l_element_courant).donnee)).objet)) - .suivant).suivant) .suivant).donnee).objet, "STATIC"); + if (tableau[i].variable_masquee == d_vrai) + { + strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)) + .objet)).suivant).suivant).suivant).donnee).objet, + "SHADOW"); + } + else + { + strcpy((unsigned char *) (*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)) + .objet)).suivant).suivant).suivant).donnee).objet, + "STATIC"); + } } else { @@ -1299,7 +1385,14 @@ instruction_vars(struct_processus *s_eta (*l_element_courant).donnee)).objet)).suivant).suivant) .suivant).donnee).objet = malloc(9 * sizeof(unsigned char))) == NULL) - { + { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1318,6 +1411,12 @@ instruction_vars(struct_processus *s_eta .suivant).suivant = allocation_maillon(s_etat_processus)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1327,18 +1426,30 @@ instruction_vars(struct_processus *s_eta .suivant).donnee = allocation(s_etat_processus, CHN)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if ((*s_etat_processus).s_liste_variables[i].variable_verrouillee - == d_vrai) + if (tableau[i].variable_verrouillee == d_vrai) { if (((*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) (*l_element_courant).donnee)).objet)).suivant).suivant) .suivant).suivant).donnee).objet = malloc(7 * sizeof(unsigned char))) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1355,6 +1466,13 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).donnee).objet = malloc(9 * sizeof(unsigned char))) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1366,7 +1484,7 @@ instruction_vars(struct_processus *s_eta } /* - * Préparation du drapeau PRIVATE/SHARED + * Préparation du drapeau PRIVATE/SHARED/MAPPED */ if (((*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) @@ -1374,6 +1492,12 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).suivant = allocation_maillon(s_etat_processus)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1383,6 +1507,12 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).donnee = allocation(s_etat_processus, CHN)) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1394,6 +1524,36 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).suivant).donnee).objet = malloc(7 * sizeof(unsigned char))) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } + + strcpy((unsigned char *) (*(*(*(*(*(*(*((struct_liste_chainee *) + (*((struct_objet *) (*l_element_courant).donnee)).objet)) + .suivant).suivant).suivant).suivant).suivant).donnee).objet, + "MAPPED"); + } + else if (tableau[i].mutex != NULL) + { + if (((*(*(*(*(*(*(*((struct_liste_chainee *) (*((struct_objet *) + (*l_element_courant).donnee)).objet)).suivant).suivant) + .suivant).suivant).suivant).donnee).objet = malloc(7 * + sizeof(unsigned char))) == NULL) + { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1410,6 +1570,13 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).suivant).donnee).objet = malloc(8 * sizeof(unsigned char))) == NULL) { + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } @@ -1429,8 +1596,17 @@ instruction_vars(struct_processus *s_eta .suivant).suivant).suivant).suivant = NULL; l_element_precedent = l_element_courant; + + if (tableau[i].mutex != NULL) + { + // La variable est une variable partagée. On libère + // le mutex. + pthread_mutex_unlock(tableau[i].mutex); + } } + free(tableau); + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), s_objet_resultat) == d_erreur) { @@ -1460,7 +1636,7 @@ instruction_visit(struct_processus *s_et struct_objet *s_objet; - unsigned long profondeur_initiale; + integer8 profondeur_initiale; (*s_etat_processus).erreur_execution = d_ex; @@ -1641,10 +1817,6 @@ instruction_visit(struct_processus *s_et void instruction_variable(struct_processus *s_etat_processus) { - logical1 presence_variable; - - long i; - struct_liste_chainee *l_element_courant; struct_objet *s_objet; @@ -1691,7 +1863,7 @@ instruction_variable(struct_processus *s if ((*s_objet).type == NOM) { - if (recherche_variable(s_etat_processus, ((*((struct_nom *) + if (recherche_variable_globale(s_etat_processus, ((*((struct_nom *) (*s_objet).objet)).nom)) == d_faux) { liberation(s_etat_processus, s_objet); @@ -1701,34 +1873,8 @@ instruction_variable(struct_processus *s return; } - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) - { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, - (*((struct_nom *) (*s_objet).objet)).nom) == 0) - && ((*s_etat_processus).s_liste_variables[i].niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; - } - - (*s_etat_processus).position_variable_courante = i; - - if (presence_variable == d_faux) - { - liberation(s_etat_processus, s_objet); - - (*s_etat_processus).erreur_execution = d_ex_variable_non_definie; - return; - } - - ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).variable_verrouillee = d_faux; + (*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee = d_faux; } else if ((*s_objet).type == LST) { @@ -1744,7 +1890,7 @@ instruction_variable(struct_processus *s return; } - if (recherche_variable(s_etat_processus, (*((struct_nom *) + if (recherche_variable_globale(s_etat_processus, (*((struct_nom *) (*(*l_element_courant).donnee).objet)).nom) == d_faux) { liberation(s_etat_processus, s_objet); @@ -1755,36 +1901,8 @@ instruction_variable(struct_processus *s return; } - i = (*s_etat_processus).position_variable_courante; - presence_variable = d_faux; - - while(i >= 0) - { - if ((strcmp((*s_etat_processus).s_liste_variables[i].nom, - (*((struct_nom *) (*(*l_element_courant).donnee) - .objet)).nom) == 0) && ((*s_etat_processus) - .s_liste_variables[i].niveau == 1)) - { - presence_variable = d_vrai; - break; - } - - i--; - } - - (*s_etat_processus).position_variable_courante = i; - - if (presence_variable == d_faux) - { - liberation(s_etat_processus, s_objet); - - (*s_etat_processus).erreur_execution = - d_ex_variable_non_definie; - return; - } - - ((*s_etat_processus).s_liste_variables[(*s_etat_processus) - .position_variable_courante]).variable_verrouillee = d_faux; + (*(*s_etat_processus).pointeur_variable_courante) + .variable_verrouillee = d_faux; l_element_courant = (*l_element_courant).suivant; }