--- rpl/src/instructions_i2.c 2011/06/24 20:31:38 1.25 +++ rpl/src/instructions_i2.c 2011/06/26 08:41:53 1.26 @@ -1040,16 +1040,16 @@ instruction_int(struct_processus *s_etat printf("(numerical)\n\n"); } - // Entier et réel - printf(" 3: %s, %s, %s\n", d_NOM, d_ALG, d_RPN); + printf(" 3: %s, %s, %s, %s, %s\n", d_INT, d_REL, + d_NOM, d_ALG, d_RPN); printf(" 2: %s\n", d_LST); printf(" 1: %s, %s\n", d_INT, d_REL); printf("-> 2: %s, %s\n", d_INT, d_REL); printf(" 1: %s, %s\n\n", d_INT, d_REL); - printf(" 2: %s, %s\n", d_ALG, d_NOM); + printf(" 2: %s, %s, %s, %s\n", d_INT, d_REL, d_NOM, d_ALG); printf(" 1: %s\n", d_NOM); - printf("-> 1: %s\n", d_ALG); + printf("-> 1: %s, %s\n", d_INT, d_ALG); return; } else if ((*s_etat_processus).test_instruction == 'Y') @@ -1094,7 +1094,9 @@ instruction_int(struct_processus *s_etat if (((*s_objet_argument_1).type == NOM) && (((*s_objet_argument_2).type == NOM) || - ((*s_objet_argument_2).type == ALG))) + ((*s_objet_argument_2).type == ALG) || + ((*s_objet_argument_2).type == REL) || + ((*s_objet_argument_2).type == INT))) { if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), s_objet_argument_2) == d_erreur) @@ -1158,6 +1160,20 @@ instruction_int(struct_processus *s_etat return; } + if (((*s_objet_argument_3).type == NOM) || + ((*s_objet_argument_3).type == ALG) || + ((*s_objet_argument_3).type == RPN) || + ((*s_objet_argument_3).type == REL) || + ((*s_objet_argument_3).type == INT)) + { + liberation(s_etat_processus, s_objet_argument_1); + liberation(s_etat_processus, s_objet_argument_2); + liberation(s_etat_processus, s_objet_argument_3); + + (*s_etat_processus).erreur_execution = d_ex_erreur_type_argument; + return; + } + if ((*s_objet_argument_1).type == INT) { precision = (*((integer8 *) (*s_objet_argument_1).objet));