--- rpl/src/types.c 2010/02/28 14:47:14 1.8 +++ rpl/src/types.c 2011/06/24 20:31:43 1.35 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.0.prerelease.4 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -75,9 +75,11 @@ recherche_type(struct_processus *s_etat_ unsigned char registre_instruction_valide; unsigned char registre_interruption; unsigned char registre_mode_execution_programme; + unsigned char registre_recherche_type; unsigned char registre_test; unsigned char registre_test_bis; unsigned char *tampon; + unsigned char variable_implicite; unsigned long i; unsigned long j; @@ -370,12 +372,18 @@ recherche_type(struct_processus *s_etat_ } } + registre_recherche_type = (*s_etat_processus).recherche_type; + (*s_etat_processus).recherche_type = 'Y'; + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + (*s_etat_processus).recherche_type = registre_recherche_type; (*s_etat_processus).instruction_courante = tampon; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; @@ -396,6 +404,7 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_etat_processus).recherche_type = registre_recherche_type; (*s_etat_processus).instruction_courante = tampon; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; @@ -1161,8 +1170,15 @@ recherche_type(struct_processus *s_etat_ } } + registre_recherche_type = + (*s_etat_processus).recherche_type; + (*s_etat_processus).recherche_type = 'Y'; + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + (*s_etat_processus).recherche_type = + registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; nombre_lignes_a_supprimer = @@ -1185,6 +1201,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -1208,6 +1225,8 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_etat_processus).recherche_type = + registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; @@ -1233,6 +1252,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -1567,9 +1587,16 @@ recherche_type(struct_processus *s_etat_ return; } } + + registre_recherche_type = (*s_etat_processus) + .recherche_type; + (*s_etat_processus).recherche_type = 'Y'; if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + (*s_etat_processus).recherche_type = + registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; nombre_lignes_a_supprimer = @@ -1592,6 +1619,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -1616,6 +1644,8 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_etat_processus).recherche_type = + registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; @@ -1641,6 +1671,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -2251,6 +2282,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).autorisation_evaluation_nom = autorisation_evaluation_nom; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; @@ -2287,11 +2319,24 @@ recherche_type(struct_processus *s_etat_ } } + variable_implicite = (*s_etat_processus).autorisation_nom_implicite; + registre_recherche_type = (*s_etat_processus).recherche_type; + (*s_etat_processus).recherche_type = 'Y'; + (*s_etat_processus).autorisation_nom_implicite = 'Y'; + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).autorisation_nom_implicite = + variable_implicite; + (*s_etat_processus).recherche_type = registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; - (*s_etat_processus).erreur_execution = d_ex_syntaxe; + + if ((*s_etat_processus).erreur_execution != + d_ex_nom_implicite) + { + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + } nombre_lignes_a_supprimer = (*s_etat_processus).hauteur_pile_operationnelle @@ -2318,6 +2363,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).autorisation_evaluation_nom = autorisation_evaluation_nom; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; @@ -2336,6 +2382,8 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_etat_processus).autorisation_nom_implicite = variable_implicite; + (*s_etat_processus).recherche_type = registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; @@ -2366,6 +2414,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).autorisation_evaluation_nom = autorisation_evaluation_nom; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = sauvegarde_niveau_courant; @@ -2915,8 +2964,20 @@ recherche_type(struct_processus *s_etat_ } } + registre_recherche_type = (*s_etat_processus).recherche_type; + (*s_etat_processus).recherche_type = 'Y'; + + variable_implicite = + (*s_etat_processus).autorisation_nom_implicite; + (*s_etat_processus).autorisation_nom_implicite = 'Y'; + if (sequenceur(s_etat_processus) == d_erreur) { + (*s_etat_processus).autorisation_nom_implicite = + variable_implicite; + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + (*s_etat_processus).recherche_type = + registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; nombre_lignes_a_supprimer = @@ -2939,6 +3000,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -2963,6 +3025,9 @@ recherche_type(struct_processus *s_etat_ return; } + (*s_etat_processus).autorisation_nom_implicite = + variable_implicite; + (*s_etat_processus).recherche_type = registre_recherche_type; (*s_etat_processus).mode_execution_programme = registre_mode_execution_programme; @@ -2988,6 +3053,7 @@ recherche_type(struct_processus *s_etat_ (*s_etat_processus).instruction_courante = tampon; + effacement_pile_systeme(s_etat_processus); (*s_etat_processus).l_base_pile_systeme = s_sauvegarde_pile; (*s_etat_processus).niveau_courant = @@ -3038,10 +3104,7 @@ recherche_type(struct_processus *s_etat_ nombre_lignes = profondeur_finale - profondeur_initiale; - element = (void *) ((struct_tableau *) malloc( - sizeof(struct_tableau))); - - if (element == NULL) + if ((element = malloc(sizeof(struct_tableau))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -3121,6 +3184,8 @@ recherche_type(struct_processus *s_etat_ d_es_allocation_memoire; } + free(s_objet); + (*s_etat_processus).traitement_interruptible = registre_interruption; return; @@ -3368,6 +3433,26 @@ recherche_type(struct_processus *s_etat_ if ((drapeau_valeur_reelle == d_faux) && (drapeau_valeur_entiere == d_faux)) { + ptr = (*s_etat_processus).instruction_courante; + + while((*ptr) != d_code_fin_chaine) + { + if ((isalnum((*ptr)) == 0) && + ((*ptr) != '_') && + ((*ptr) != '$')) + { + free(s_objet); + + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + (*s_etat_processus).traitement_interruptible = + registre_interruption; + + return; + } + + ptr++; + } + (*s_objet).type = NOM; element = malloc(sizeof(struct_nom));