--- rpl/src/instructions_l1.c 2015/11/26 11:44:36 1.53 +++ rpl/src/instructions_l1.c 2015/12/13 22:55:00 1.54 @@ -44,6 +44,10 @@ instruction_list_fleche(struct_processus struct_objet *s_copie_objet; struct_objet *s_objet; + unsigned char *registre_instruction_courante; + unsigned char registre_instruction_valide; + unsigned char registre_test; + unsigned long nombre_elements; (*s_etat_processus).erreur_execution = d_ex; @@ -121,10 +125,57 @@ instruction_list_fleche(struct_processus while(l_element_courant != NULL) { - if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), - (*l_element_courant).donnee) == d_erreur) + if ((*(*l_element_courant).donnee).type != FCT) { - return; + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), + (*l_element_courant).donnee) == d_erreur) + { + return; + } + } + else + { + registre_test = (*s_etat_processus).test_instruction; + registre_instruction_courante = (*s_etat_processus) + .instruction_courante; + registre_instruction_valide = (*s_etat_processus) + .instruction_valide; + + (*s_etat_processus).test_instruction = 'Y'; + (*s_etat_processus).instruction_courante = + (*((struct_fonction *) (*(*l_element_courant).donnee) + .objet)).nom_fonction; + + analyse(s_etat_processus, NULL); + + (*s_etat_processus).test_instruction = registre_test; + (*s_etat_processus).instruction_courante = + registre_instruction_courante; + + if (((*s_etat_processus).instruction_valide == 'Y') && + (*s_etat_processus).constante_symbolique == 'Y') + { + if (evaluation(s_etat_processus, (*l_element_courant).donnee, + 'E') == d_erreur) + { + (*s_etat_processus).instruction_valide = + registre_instruction_valide; + return; + } + } + else + { + if (empilement(s_etat_processus, &((*s_etat_processus) + .l_base_pile), (*l_element_courant).donnee) == d_erreur) + { + (*s_etat_processus).instruction_valide = + registre_instruction_valide; + return; + } + } + + (*s_etat_processus).instruction_valide = + registre_instruction_valide; } l_element_precedent = l_element_courant;