version 1.4, 2011/06/24 15:59:07
|
version 1.8, 2011/06/27 09:05:00
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.0.prerelease.3 |
RPL/2 (R) version 4.1.0 |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
Copyright (C) 1989-2011 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 95 conversion_rpl_vers_cas(struct_processus
|
Line 95 conversion_rpl_vers_cas(struct_processus
|
{ |
{ |
unsigned char *ptr; |
unsigned char *ptr; |
|
|
ptr = reinterpret_cast<unsigned char *>(((struct_fonction *) |
ptr = reinterpret_cast<unsigned char *>( |
|
reinterpret_cast<struct_fonction *>( |
l_element_courant->donnee->objet)->nom_fonction); |
l_element_courant->donnee->objet)->nom_fonction); |
|
|
while((*ptr) != d_code_fin_chaine) |
while((*ptr) != d_code_fin_chaine) |
Line 152 conversion_cas_vers_rpl(struct_processus
|
Line 153 conversion_cas_vers_rpl(struct_processus
|
// qui n'est pas reconnu comme un mot-clef du RPL/2. S'il |
// qui n'est pas reconnu comme un mot-clef du RPL/2. S'il |
// s'agit d'un mot-clef de GIAC, on le convertit. |
// s'agit d'un mot-clef de GIAC, on le convertit. |
|
|
if (strcmp(const_cast<const char *>(reinterpret_cast<char *>( |
if (strcmp((const char *) |
((struct_fonction *) l_element_courant->donnee |
reinterpret_cast<struct_fonction *>(l_element_courant |
->objet)->nom_fonction)), "quote") == 0) |
->donnee->objet)->nom_fonction, "quote") == 0) |
{ |
{ |
liberation(s_etat_processus, l_element_courant->donnee); |
liberation(s_etat_processus, l_element_courant->donnee); |
|
|
Line 176 conversion_cas_vers_rpl(struct_processus
|
Line 177 conversion_cas_vers_rpl(struct_processus
|
return; |
return; |
} |
} |
|
|
strcpy(reinterpret_cast<char *>(((struct_fonction *) |
strcpy(reinterpret_cast<char *>( |
|
reinterpret_cast<struct_fonction *>( |
l_element_courant->donnee->objet)->nom_fonction), |
l_element_courant->donnee->objet)->nom_fonction), |
"RELAX"); |
"RELAX"); |
} |
} |
Line 251 interface_cas(struct_processus *s_etat_p
|
Line 253 interface_cas(struct_processus *s_etat_p
|
liberation(s_etat_processus, s_objet_argument_1); |
liberation(s_etat_processus, s_objet_argument_1); |
liberation(s_etat_processus, s_objet_argument_2); |
liberation(s_etat_processus, s_objet_argument_2); |
|
|
gen variable(string(reinterpret_cast<const char *>(argument_1)), |
try |
giac::context0); |
{ |
gen expression(string(reinterpret_cast<const char *>(argument_2)), |
giac::context contexte; |
giac::context0); |
|
|
|
free(argument_1); |
|
free(argument_2); |
|
|
|
gen resultat = integrate(expression, variable, giac::context0); |
gen variable( |
string chaine = "'" + resultat.print() + "'"; |
string(reinterpret_cast<const char *>(argument_1)), |
|
&contexte); |
|
gen expression( |
|
string(reinterpret_cast<const char *>(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<unsigned char *>(const_cast<char *> |
|
(chaine.c_str())); |
|
|
registre = s_etat_processus->instruction_courante; |
recherche_type(s_etat_processus); |
s_etat_processus->instruction_courante = |
|
reinterpret_cast<unsigned char*>(const_cast<char *> |
|
(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->erreur_execution = d_ex_erreur_interne_rplcas; |
s_etat_processus->l_base_pile->donnee); |
|
} |
} |
|
|
s_etat_processus->instruction_courante = registre; |
free(argument_1); |
|
free(argument_2); |
|
|
break; |
break; |
} |
} |