--- rpl/src/interface_cas.cpp 2020/06/04 09:35:35 1.65 +++ rpl/src/interface_cas.cpp 2023/11/27 12:51:19 1.70 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.32 - Copyright (C) 1989-2020 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.35 + Copyright (C) 1989-2023 Dr. BERTRAND Joël This file is part of RPL/2. @@ -55,7 +55,9 @@ extern "C" # include "rpl-conv.h" } -#include +#ifdef RPLCAS +# include +#endif using namespace std; @@ -707,6 +709,51 @@ interface_cas(struct_processus *s_etat_p break; } + + case RPLCAS_SIMPLIFICATION: + { + if (depilement(s_etat_processus, &(s_etat_processus->l_base_pile), + &s_objet_argument_1) == d_erreur) + { + s_etat_processus->erreur_execution = d_ex_manque_argument; + return; + } + + if ((argument_1 = conversion_rpl_vers_cas(s_etat_processus, + &s_objet_argument_1)) == NULL) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + return; + } + + liberation(s_etat_processus, s_objet_argument_1); + + try + { + gen expression( + string(reinterpret_cast(argument_1)), + contexte); + + gen resultat = simplify(expression, contexte); + string chaine = "'" + resultat.print() + "'"; + + conversion_cas_vers_rpl(s_etat_processus, + reinterpret_cast(const_cast( + chaine.c_str()))); + } + catch(bad_alloc &exception) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + } + catch(...) + { + s_etat_processus->erreur_execution = d_ex_erreur_interne_rplcas; + } + + free(argument_1); + + break; + } } return;