--- rpl/src/types.c 2012/03/01 10:14:09 1.46 +++ rpl/src/types.c 2012/03/30 14:13:17 1.47 @@ -49,6 +49,7 @@ recherche_type(struct_processus *s_etat_ struct_liste_pile_systeme *s_sauvegarde_pile; struct_objet *s_objet; + struct_objet *s_objet_registre; struct_objet *s_sous_objet; logical1 drapeau_chaine; @@ -101,18 +102,16 @@ recherche_type(struct_processus *s_etat_ void *element; - s_objet = (struct_objet *) malloc(sizeof(struct_objet)); - element = NULL; - nombre_egalites = 0; - i = 0; - - if (s_objet == NULL) + if ((s_objet = allocation(s_etat_processus, NON)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - initialisation_objet(s_objet); + element = NULL; + nombre_egalites = 0; + i = 0; + registre_test = (*s_etat_processus).test_instruction; registre_instruction_valide = (*s_etat_processus).instruction_valide; registre_interruption = (*s_etat_processus).traitement_interruptible; @@ -208,7 +207,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).test_instruction = 'N'; analyse(s_etat_processus, NULL); (*s_etat_processus).test_instruction = registre_test_bis; - free(s_objet); + liberation(s_etat_processus, s_objet); } else { @@ -273,8 +272,6 @@ recherche_type(struct_processus *s_etat_ case '(' : { - (*s_objet).type = CPL; - element = (void *) ((struct_complexe16 *) malloc( sizeof(struct_complexe16))); @@ -397,7 +394,7 @@ recherche_type(struct_processus *s_etat_ sauvegarde_longueur_definitions_chainees; free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).traitement_interruptible = registre_interruption; @@ -432,7 +429,7 @@ recherche_type(struct_processus *s_etat_ { (*s_etat_processus).erreur_execution = d_ex_syntaxe; - free(s_objet); + liberation(s_etat_processus, s_objet); free(element); for(i = 0; i < (unsigned long) nombre_elements_convertis; i++) @@ -473,7 +470,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).erreur_execution = d_ex_syntaxe; free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); liberation(s_etat_processus, s_sous_objet); @@ -503,7 +500,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).erreur_execution = d_ex_syntaxe; free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); liberation(s_etat_processus, s_sous_objet); @@ -517,6 +514,7 @@ recherche_type(struct_processus *s_etat_ } } + (*s_objet).type = CPL; break; } @@ -528,8 +526,6 @@ recherche_type(struct_processus *s_etat_ case '#' : { - (*s_objet).type = BIN; - element = (void *) ((logical8 *) malloc( sizeof(logical8))); @@ -580,7 +576,7 @@ recherche_type(struct_processus *s_etat_ if (i != 0) { free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; @@ -684,7 +680,7 @@ recherche_type(struct_processus *s_etat_ if (i != 0) { free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; @@ -798,7 +794,7 @@ recherche_type(struct_processus *s_etat_ if (i != 0) { free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; @@ -942,7 +938,7 @@ recherche_type(struct_processus *s_etat_ if (i != 0) { free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; @@ -993,7 +989,7 @@ recherche_type(struct_processus *s_etat_ (erreur_lecture_binaire == d_vrai)) { free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1001,6 +997,7 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_objet).type = BIN; break; } @@ -1061,7 +1058,7 @@ recherche_type(struct_processus *s_etat_ if (niveau != 0) { - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1217,7 +1214,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).longueur_definitions_chainees = sauvegarde_longueur_definitions_chainees; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1268,7 +1265,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).longueur_definitions_chainees = sauvegarde_longueur_definitions_chainees; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1345,7 +1342,7 @@ recherche_type(struct_processus *s_etat_ } erreur = d_absence_erreur; - free(s_objet); + s_objet_registre = s_objet; for(i = 0; (i < nombre_colonnes) && (erreur == d_absence_erreur); i++) @@ -1442,6 +1439,8 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus) .traitement_interruptible = registre_interruption; + liberation(s_etat_processus, + s_objet_registre); return; } @@ -1454,6 +1453,7 @@ recherche_type(struct_processus *s_etat_ free((*((struct_vecteur *) element)).tableau); free(element); + liberation(s_etat_processus, s_objet_registre); (*s_etat_processus).traitement_interruptible = registre_interruption; return; @@ -1468,18 +1468,7 @@ recherche_type(struct_processus *s_etat_ } } - s_objet = (struct_objet *) malloc(sizeof(struct_objet)); - - if (s_objet == NULL) - { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; - (*s_etat_processus).traitement_interruptible = - registre_interruption; - return; - } - - initialisation_objet(s_objet); + s_objet = s_objet_registre; if (drapeau_complexe == d_vrai) { @@ -1636,7 +1625,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).position_courante = position_courante; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1688,7 +1677,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).position_courante = position_courante; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -1771,7 +1760,7 @@ recherche_type(struct_processus *s_etat_ } free(element); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).traitement_interruptible = registre_interruption; @@ -1792,7 +1781,7 @@ recherche_type(struct_processus *s_etat_ l_element_courant = (*l_element_courant).suivant; } - free(s_objet); + s_objet_registre = s_objet; if ((*s_etat_processus).erreur_execution == d_ex) { @@ -1803,6 +1792,8 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_lignes * sizeof( struct_complexe16 *)))) == NULL) { + liberation(s_etat_processus, s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus).traitement_interruptible = @@ -1820,6 +1811,9 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_colonnes * sizeof( struct_complexe16)))) == NULL) { + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus) @@ -1836,6 +1830,8 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_lignes * sizeof(real8 *)))) == NULL) { + liberation(s_etat_processus, s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus).traitement_interruptible = @@ -1852,6 +1848,9 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_colonnes * sizeof(real8)))) == NULL) { + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus) @@ -1868,6 +1867,8 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_lignes * sizeof(integer8 *)))) == NULL) { + liberation(s_etat_processus, s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus).traitement_interruptible = @@ -1885,6 +1886,9 @@ recherche_type(struct_processus *s_etat_ malloc(nombre_colonnes * sizeof(integer8)))) == NULL) { + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; (*s_etat_processus) @@ -2027,6 +2031,9 @@ recherche_type(struct_processus *s_etat_ .l_base_pile), &s_objet) == d_erreur) { + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus) .traitement_interruptible = registre_interruption; @@ -2050,6 +2057,9 @@ recherche_type(struct_processus *s_etat_ .tableau); free(element); + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus) .traitement_interruptible = registre_interruption; @@ -2066,18 +2076,7 @@ recherche_type(struct_processus *s_etat_ } } - s_objet = (struct_objet *) malloc(sizeof(struct_objet)); - - if (s_objet == NULL) - { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; - (*s_etat_processus).traitement_interruptible = - registre_interruption; - return; - } - - initialisation_objet(s_objet); + s_objet = s_objet_registre; if (drapeau_complexe == d_vrai) { @@ -2287,7 +2286,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; free((*s_etat_processus).definitions_chainees); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).definitions_chainees = definitions_chainees_precedentes; @@ -2368,7 +2367,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; free((*s_etat_processus).definitions_chainees); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).definitions_chainees = definitions_chainees_precedentes; @@ -2419,7 +2418,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; free((*s_etat_processus).definitions_chainees); - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).definitions_chainees = definitions_chainees_precedentes; @@ -2459,8 +2458,7 @@ recherche_type(struct_processus *s_etat_ profondeur_finale = (*s_etat_processus).hauteur_pile_operationnelle; l_element_courant = NULL; - - free(s_objet); + s_objet_registre = s_objet; for(i = 0; i < (profondeur_finale - profondeur_initiale); i++) { @@ -2468,6 +2466,7 @@ recherche_type(struct_processus *s_etat_ &((*s_etat_processus).l_base_pile), &s_objet) == d_erreur) { + liberation(s_etat_processus, s_objet_registre); (*s_etat_processus).traitement_interruptible = registre_interruption; return; @@ -2476,23 +2475,14 @@ recherche_type(struct_processus *s_etat_ if (empilement(s_etat_processus, &l_element_courant, s_objet) == d_erreur) { + liberation(s_etat_processus, s_objet_registre); (*s_etat_processus).traitement_interruptible = registre_interruption; return; } } - s_objet = (struct_objet *) malloc(sizeof(struct_objet)); - - if (s_objet == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - (*s_etat_processus).traitement_interruptible = - registre_interruption; - return; - } - - initialisation_objet(s_objet); + s_objet = s_objet_registre; (*s_objet).type = LST; element = (void *) l_element_courant; @@ -2528,7 +2518,7 @@ recherche_type(struct_processus *s_etat_ free(l_element_courant_fonctions); } - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).traitement_interruptible = registre_interruption; @@ -2567,7 +2557,8 @@ recherche_type(struct_processus *s_etat_ * puis on renvoie une erreur. */ - free(s_objet); + (*s_objet).type = NON; + liberation(s_etat_processus, s_objet); l_element_courant = l_base_liste_decomposition; @@ -3027,7 +3018,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).position_courante = position_courante; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -3080,7 +3071,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).position_courante = position_courante; - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -3161,7 +3152,7 @@ recherche_type(struct_processus *s_etat_ if (strlen((*s_etat_processus).instruction_courante) < 5) { - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -3173,7 +3164,7 @@ recherche_type(struct_processus *s_etat_ != 0) && (strcmp((*s_etat_processus) .instruction_courante, "<<") != 0)) { - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible = @@ -3194,7 +3185,7 @@ recherche_type(struct_processus *s_etat_ d_es_allocation_memoire; } - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).traitement_interruptible = registre_interruption; @@ -3451,7 +3442,7 @@ recherche_type(struct_processus *s_etat_ ((*ptr) != '_') && ((*ptr) != '$')) { - free(s_objet); + liberation(s_etat_processus, s_objet); (*s_etat_processus).erreur_execution = d_ex_syntaxe; (*s_etat_processus).traitement_interruptible =