Diff for /rpl/src/interface_cas.cpp between versions 1.12 and 1.13

version 1.12, 2011/08/03 09:26:47 version 1.13, 2011/08/06 10:32:12
Line 233  conversion_rpl_vers_cas(struct_processus Line 233  conversion_rpl_vers_cas(struct_processus
   
 static void  static void
 conversion_cas_vers_rpl(struct_processus *s_etat_processus,  conversion_cas_vers_rpl(struct_processus *s_etat_processus,
         struct_objet *s_objet)          unsigned char *expression)
 {  {
       logical1                    drapeau;
   
     struct_liste_chainee        *l_element_courant;      struct_liste_chainee        *l_element_courant;
     struct_liste_chainee        *l_element_precedent;      struct_liste_chainee        *l_element_precedent;
   
       struct_objet                *s_objet;
   
       unsigned char               *registre;
   
       registre = s_etat_processus->instruction_courante;
       s_etat_processus->instruction_courante = expression;
       recherche_type(s_etat_processus);
       s_etat_processus->instruction_courante = registre;
   
       if ((s_etat_processus->l_base_pile == NULL) ||
               (s_etat_processus->erreur_execution != d_ex) ||
               (s_etat_processus->erreur_systeme != d_es))
       {
           return;
       }
   
       // Le niveau 1 de la pile opérationnelle contient l'expression
       // à convertir.
   
       if (depilement(s_etat_processus, &(s_etat_processus
               ->l_base_pile), &s_objet) == d_erreur)
       {
           return;
       }
   
     if ((s_objet->type == ALG) || (s_objet->type == RPN))      if ((s_objet->type == ALG) || (s_objet->type == RPN))
     {      {
         // On transcrit les fonctions de GIAC vers le RPL/2.          // On transcrit les fonctions de GIAC vers le RPL/2.
   
           l_element_courant = reinterpret_cast<struct_liste_chainee *>(
                   s_objet->objet);
           drapeau = d_faux;
   
           // S'il y a une valeur infini, on force l'évaluation de l'expression.
   
           while(l_element_courant != NULL)
           {
               if (l_element_courant->donnee->type == NOM)
               {
                   if (strcmp((const char *) reinterpret_cast<unsigned char *>(
                           reinterpret_cast<struct_nom *>(
                           l_element_courant->donnee->objet)->nom),
                           "infinity") == 0)
                   {
                       drapeau = d_vrai;
                       break;
                   }
               }
   
               l_element_courant = l_element_courant->suivant;
           }
   
           if (drapeau == d_vrai)
           {
               if (evaluation(s_etat_processus, s_objet, 'N') == d_erreur)
               {
                   return;
               }
   
               liberation(s_etat_processus, s_objet);
   
               if (depilement(s_etat_processus, &(s_etat_processus
                       ->l_base_pile), &s_objet) == d_erreur)
               {
                   return;
               }
           }
       }
   
       if ((s_objet->type == ALG) || (s_objet->type == RPN))
       {
         l_element_precedent = NULL;          l_element_precedent = NULL;
         l_element_courant = reinterpret_cast<struct_liste_chainee *>(          l_element_courant = reinterpret_cast<struct_liste_chainee *>(
                 s_objet->objet);                  s_objet->objet);
Line 293  conversion_cas_vers_rpl(struct_processus Line 362  conversion_cas_vers_rpl(struct_processus
         }          }
     }      }
   
       if (empilement(s_etat_processus, &(s_etat_processus->l_base_pile),
               s_objet) == d_erreur)
       {
           return;
       }
   
     return;      return;
 }  }
   
Line 325  interface_cas(struct_processus *s_etat_p Line 400  interface_cas(struct_processus *s_etat_p
     unsigned char           *argument_2;      unsigned char           *argument_2;
     unsigned char           *argument_3;      unsigned char           *argument_3;
     unsigned char           *argument_4;      unsigned char           *argument_4;
     unsigned char           *registre;  
   
     unsigned int            position;      unsigned int            position;
   
Line 379  interface_cas(struct_processus *s_etat_p Line 453  interface_cas(struct_processus *s_etat_p
                 gen resultat = integrate_gen(expression, variable, &contexte);                  gen resultat = integrate_gen(expression, variable, &contexte);
                 string chaine = "'" + resultat.print() + "'";                  string chaine = "'" + resultat.print() + "'";
   
                 registre = s_etat_processus->instruction_courante;                  conversion_cas_vers_rpl(s_etat_processus,
                 s_etat_processus->instruction_courante =                          reinterpret_cast<unsigned char *>(const_cast<char *>(
                         reinterpret_cast<unsigned char *>(const_cast<char *>                          chaine.c_str())));
                         (chaine.c_str()));  
   
                 recherche_type(s_etat_processus);  
   
                 if (s_etat_processus->l_base_pile != NULL)  
                 {  
                     conversion_cas_vers_rpl(s_etat_processus,  
                             s_etat_processus->l_base_pile->donnee);  
                 }  
   
                 s_etat_processus->instruction_courante = registre;  
             }              }
             catch(bad_alloc exception)              catch(bad_alloc exception)
             {              {
Line 551  interface_cas(struct_processus *s_etat_p Line 614  interface_cas(struct_processus *s_etat_p
                         &contexte);                          &contexte);
                 string chaine = "'" + resultat.print() + "'";                  string chaine = "'" + resultat.print() + "'";
   
                 registre = s_etat_processus->instruction_courante;                  conversion_cas_vers_rpl(s_etat_processus,
                 s_etat_processus->instruction_courante =                          reinterpret_cast<unsigned char *>(const_cast<char *>(
                         reinterpret_cast<unsigned char *>(const_cast<char *>                          chaine.c_str())));
                         (chaine.c_str()));  
   
                 recherche_type(s_etat_processus);  
   
                 if (s_etat_processus->l_base_pile != NULL)  
                 {  
                     conversion_cas_vers_rpl(s_etat_processus,  
                             s_etat_processus->l_base_pile->donnee);  
                 }  
   
                 s_etat_processus->instruction_courante = registre;  
             }              }
             catch(bad_alloc exception)              catch(bad_alloc exception)
             {              {

Removed from v.1.12  
changed lines
  Added in v.1.13


CVSweb interface <joel.bertrand@systella.fr>