version 1.28, 2011/06/08 13:35:15
|
version 1.30, 2011/06/11 09:36:31
|
Line 66 ajout_variable(struct_processus *s_etat_
|
Line 66 ajout_variable(struct_processus *s_etat_
|
(*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0; |
(*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0; |
(*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL; |
(*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL; |
|
|
if (((*(*s_etat_processus).arbre_instructions).noeud = |
if (((*(*s_etat_processus).s_arbre_variables).noeuds = |
malloc((*s_etat_processus).nombre_caracteres_variables |
malloc((*s_etat_processus).nombre_caracteres_variables |
* sizeof(struct_arbre_variables))) == NULL) |
* sizeof(struct_arbre_variables))) == NULL) |
{ |
{ |
Line 137 ajout_variable(struct_processus *s_etat_
|
Line 137 ajout_variable(struct_processus *s_etat_
|
|
|
if ((*l_variable_courante).feuille == NULL) |
if ((*l_variable_courante).feuille == NULL) |
{ |
{ |
|
printf("Nouvelle feuille\n"); |
// Aucune variable de même nom préexiste. On alloue le premier |
// Aucune variable de même nom préexiste. On alloue le premier |
// élément de la liste doublement chaînée contenant toutes les |
// élément de la liste doublement chaînée contenant toutes les |
// variables de même nom. Cette liste boucle en premier lieu sur |
// variables de même nom. Cette liste boucle en premier lieu sur |
Line 527 recherche_variable(struct_processus *s_e
|
Line 528 recherche_variable(struct_processus *s_e
|
if ((*s_etat_processus).s_arbre_variables == NULL) |
if ((*s_etat_processus).s_arbre_variables == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_variable_introuvable; |
(*s_etat_processus).erreur_systeme = d_es_variable_introuvable; |
return d_faux; |
return(d_faux); |
} |
} |
|
|
l_variable_courante = (*s_etat_processus).s_arbre_variables; |
l_variable_courante = (*s_etat_processus).s_arbre_variables; |
Line 540 recherche_variable(struct_processus *s_e
|
Line 541 recherche_variable(struct_processus *s_e
|
if (pointeur < 0) |
if (pointeur < 0) |
{ |
{ |
// Caractère hors de l'alphabet des variables |
// Caractère hors de l'alphabet des variables |
return(d_erreur); |
|
|
(*s_etat_processus).erreur_systeme = d_es_variable_introuvable; |
|
return(d_faux); |
} |
} |
|
|
if ((*l_variable_courante).noeuds[pointeur] == NULL) |
if ((*l_variable_courante).noeuds[pointeur] == NULL) |
{ |
{ |
// Le chemin de la variable candidate n'existe pas. |
// Le chemin de la variable candidate n'existe pas. |
return(d_erreur); |
(*s_etat_processus).erreur_systeme = d_es_variable_introuvable; |
|
return(d_faux); |
} |
} |
|
|
l_variable_courante = (*l_variable_courante).noeuds[pointeur]; |
l_variable_courante = (*l_variable_courante).noeuds[pointeur]; |
Line 564 recherche_variable(struct_processus *s_e
|
Line 568 recherche_variable(struct_processus *s_e
|
{ |
{ |
// Problème : la pile système est vide ! |
// Problème : la pile système est vide ! |
(*s_etat_processus).erreur_systeme = d_es_pile_vide; |
(*s_etat_processus).erreur_systeme = d_es_pile_vide; |
return(d_erreur); |
return(d_faux); |
} |
} |
|
|
while((*l_element_courant).retour_definition != 'Y') |
while((*l_element_courant).retour_definition != 'Y') |
Line 574 recherche_variable(struct_processus *s_e
|
Line 578 recherche_variable(struct_processus *s_e
|
if (l_element_courant == NULL) |
if (l_element_courant == NULL) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_pile_vide; |
(*s_etat_processus).erreur_systeme = d_es_pile_vide; |
return(d_erreur); |
return(d_faux); |
} |
} |
} |
} |
|
|
Line 589 recherche_variable(struct_processus *s_e
|
Line 593 recherche_variable(struct_processus *s_e
|
(*(*l_variable_courante).feuille).variable; |
(*(*l_variable_courante).feuille).variable; |
(*s_etat_processus).pointeur_feuille_courante = |
(*s_etat_processus).pointeur_feuille_courante = |
(*l_variable_courante).feuille; |
(*l_variable_courante).feuille; |
return(d_absence_erreur); |
return(d_vrai); |
} |
} |
else |
else |
{ |
{ |
Line 623 recherche_variable(struct_processus *s_e
|
Line 627 recherche_variable(struct_processus *s_e
|
(*l_variable_courante).feuille; |
(*l_variable_courante).feuille; |
} |
} |
|
|
return(d_absence_erreur); |
return(d_vrai); |
|
} |
|
} |
|
} |
|
|
|
(*s_etat_processus).erreur_systeme = d_es_variable_introuvable; |
|
return(d_faux); |
|
} |
|
|
|
|
|
logical1 |
|
recherche_variable_globale(struct_processus *s_etat_processus, |
|
unsigned char *nom) |
|
{ |
|
logical1 presence_variable; |
|
|
|
presence_variable = recherche_variable(s_etat_processus, nom); |
|
|
|
if (presence_variable == d_vrai) |
|
{ |
|
switch((*(*s_etat_processus).pointeur_variable_courante).niveau) |
|
{ |
|
case 0: |
|
{ |
|
// Nous sommes en présence d'une définition et non d'une |
|
// variable. |
|
|
|
presence_variable = d_faux; |
|
break; |
|
} |
|
|
|
case 1: |
|
{ |
|
break; |
} |
} |
|
|
|
default: |
|
{ |
|
if ((*(*(*(*s_etat_processus).pointeur_feuille_courante) |
|
.precedent).variable).niveau == 1) |
|
{ |
|
(*s_etat_processus).pointeur_feuille_courante = |
|
(*(*s_etat_processus).pointeur_feuille_courante) |
|
.precedent; |
|
(*s_etat_processus).pointeur_variable_courante = |
|
(*(*s_etat_processus).pointeur_feuille_courante) |
|
.variable; |
|
} |
|
else if ((*(*(*(*(*s_etat_processus).pointeur_feuille_courante) |
|
.precedent).precedent).variable).niveau == 1) |
|
{ |
|
(*s_etat_processus).pointeur_feuille_courante = |
|
(*(*(*s_etat_processus).pointeur_feuille_courante) |
|
.precedent).precedent; |
|
(*s_etat_processus).pointeur_variable_courante = |
|
(*(*s_etat_processus).pointeur_feuille_courante) |
|
.variable; |
|
} |
|
else |
|
{ |
|
presence_variable = d_faux; |
|
} |
|
|
|
break; |
|
} |
|
} |
|
} |
|
|
|
if (presence_variable == d_vrai) |
|
{ |
|
if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL) |
|
{ |
|
// La variable n'est pas globale, elle est partagée. |
|
presence_variable = d_faux; |
|
(*s_etat_processus).erreur_execution = d_ex_variable_partagee; |
} |
} |
} |
} |
|
|
return(d_erreur); |
return(presence_variable); |
} |
} |
|
|
|
|