--- rpl/src/types.c 2012/03/30 14:13:17 1.47 +++ rpl/src/types.c 2013/03/16 11:31:41 1.58 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.7 - Copyright (C) 1989-2012 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.13 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1461,6 +1461,8 @@ recherche_type(struct_processus *s_etat_ } else { + liberation(s_etat_processus, s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_pile_vide; (*s_etat_processus).traitement_interruptible = registre_interruption; @@ -2068,6 +2070,9 @@ recherche_type(struct_processus *s_etat_ } else { + liberation(s_etat_processus, + s_objet_registre); + (*s_etat_processus).erreur_systeme = d_es_pile_vide; (*s_etat_processus).traitement_interruptible = @@ -2217,13 +2222,32 @@ recherche_type(struct_processus *s_etat_ if ((*s_etat_processus).definitions_chainees [(*s_etat_processus).position_courante] == '"') { - if (drapeau_chaine == d_faux) + if ((*s_etat_processus).position_courante > 0) { - drapeau_chaine = d_vrai; + if ((*s_etat_processus).definitions_chainees + [(*s_etat_processus).position_courante - 1] + != '\\') + { + if (drapeau_chaine == d_faux) + { + drapeau_chaine = d_vrai; + } + else + { + drapeau_chaine = d_faux; + } + } } - else + else { - drapeau_chaine = d_faux; + if (drapeau_chaine == d_faux) + { + drapeau_chaine = d_vrai; + } + else + { + drapeau_chaine = d_faux; + } } } else if (drapeau_chaine == d_faux) @@ -3523,21 +3547,13 @@ recherche_type(struct_processus *s_etat_ integer8 conversion_entiere; real8 conversion_reelle; - if (sscanf((*s_etat_processus).instruction_courante, "%lg", - &conversion_reelle) != 1) - { - (*s_etat_processus).erreur_execution = d_ex_syntaxe; - } - if (sscanf((*s_etat_processus).instruction_courante, "%lld", &conversion_entiere) != 1) { (*s_etat_processus).erreur_execution = d_ex_syntaxe; } - if (abs(nextafter(conversion_reelle, conversion_entiere) - - conversion_reelle) >= abs(conversion_reelle - - conversion_entiere)) + if (errno != ERANGE) { (*s_objet).type = INT; @@ -3556,6 +3572,12 @@ recherche_type(struct_processus *s_etat_ } else { + if (sscanf((*s_etat_processus).instruction_courante, + "%lg", &conversion_reelle) != 1) + { + (*s_etat_processus).erreur_execution = d_ex_syntaxe; + } + (*s_objet).type = REL; element = malloc(sizeof(real8));