--- rpl/src/interface_cas.cpp 2011/06/24 21:01:57 1.6 +++ rpl/src/interface_cas.cpp 2011/06/25 10:40:48 1.7 @@ -253,31 +253,46 @@ interface_cas(struct_processus *s_etat_p liberation(s_etat_processus, s_objet_argument_1); liberation(s_etat_processus, s_objet_argument_2); - gen variable(string(reinterpret_cast(argument_1)), - giac::context0); - gen expression(string(reinterpret_cast(argument_2)), - giac::context0); - - free(argument_1); - free(argument_2); - - gen resultat = integrate(expression, variable, giac::context0); - string chaine = "'" + resultat.print() + "'"; - - registre = s_etat_processus->instruction_courante; - s_etat_processus->instruction_courante = - reinterpret_cast(const_cast - (chaine.c_str())); + try + { + giac::context contexte; - recherche_type(s_etat_processus); + gen variable( + string(reinterpret_cast(argument_1)), + &contexte); + gen expression( + string(reinterpret_cast(argument_2)), + &contexte); + + gen resultat = integrate(expression, variable, &contexte); + string chaine = "'" + resultat.print() + "'"; + + registre = s_etat_processus->instruction_courante; + s_etat_processus->instruction_courante = + reinterpret_cast(const_cast + (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); + } - if (s_etat_processus->l_base_pile != NULL) + s_etat_processus->instruction_courante = registre; + } + catch(bad_alloc exception) + { + s_etat_processus->erreur_systeme = d_es_allocation_memoire; + } + catch(...) { - conversion_cas_vers_rpl(s_etat_processus, - s_etat_processus->l_base_pile->donnee); + s_etat_processus->erreur_execution = d_ex_erreur_interne_rplcas; } - s_etat_processus->instruction_courante = registre; + free(argument_1); + free(argument_2); break; }