--- rpl/src/rpl.h 2011/04/14 09:57:15 1.80 +++ rpl/src/rpl.h 2011/04/19 07:31:33 1.83 @@ -1693,9 +1693,23 @@ typedef struct instruction #ifndef RPLARGS typedef struct arbre_variables { + unsigned int noeuds_utilises; struct arbre_variables **noeud; - struct_liste_chainee *l_variable; + struct liste_variables *feuille; } struct_arbre_variables; + +typedef struct liste_variables +{ + union + { + struct_variable *variable; + struct_liste_chainee *liste; + }; + + struct liste_variables *suivant; + struct liste_variables *precedent; +} struct_liste_variables; + #endif /* @@ -1807,8 +1821,24 @@ typedef struct processus /* Variables */ + // La liste des variables par niveau est doublement chaînée. + // À tout moment, elle pointe sur le niveau le plus haut existant et + // l_liste_variable_par_niveau->precedent renvoie la liste des + // définitions. l_liste_variable_par_niveau->precedent->precedent pointe + // sur la liste des variables globales. + // + // À l'initialisation : + // l_liste_variables_par_niveau->suivant == l_liste_variables_par_niveau + // l_liste_variables_par_niveau->precedent == l_liste_variables_par_niveau + struct_arbre_variables *s_arbre_variables; - struct_liste_chainee *l_liste_variables_par_niveau; + struct_liste_variables *l_liste_variables_par_niveau; + + struct_variable *pointeur_variable_courante; + struct_liste_variables *pointeur_feuille_courante; + + int *pointeurs_caracteres_variables; + int nombre_caracteres_variables; struct_variable_statique *s_liste_variables_statiques; unsigned long nombre_variables_statiques; @@ -1819,7 +1849,6 @@ typedef struct processus unsigned long niveau_courant; unsigned long niveau_initial; - struct_variable *pointeur_variable_courante; unsigned long position_variable_statique_courante; logical1 creation_variables_statiques; @@ -2810,6 +2839,7 @@ void initialisation_drapeaux(struct_proc void initialisation_generateur_aleatoire(struct_processus *s_etat_processus, logical1 initialisation_automatique, unsigned long int racine); void initialisation_instructions(struct_processus *s_etat_processus); +void initialisation_variables(struct_processus *s_etat_processus); #endif void initialisation_objet(struct_objet *s_objet); @@ -2847,6 +2877,8 @@ void liberation_maillon(struct_processus void liberation_allocateur(struct_processus *s_etat_processus); void liberation_arbre_instructions(struct_processus *s_etat_processus, struct_instruction *arbre); +void liberation_arbre_variables(struct_processus *s_etat_processus, + struct_arbre_variables *arbre, logical1 definitions); void liberation_generateur_aleatoire(struct_processus *s_etat_processus); void liberation_threads(struct_processus *s_etat_processus); void liberation_profil(struct_processus *s_etat_processus); @@ -3057,6 +3089,9 @@ logical1 retrait_variable_statique(struc unsigned char *nom_variable, union_position_variable position); logical1 sequenceur(struct_processus *s_etat_processus); logical1 sequenceur_optimise(struct_processus *s_etat_processus); + +struct_arbre_variables *copie_arbre_variables( + struct_processus *s_etat_processus); #endif /*