--- rpl/src/rplexternals.h 2015/06/08 14:11:45 1.64 +++ rpl/src/rplexternals.h 2015/06/11 21:20:41 1.65 @@ -130,7 +130,6 @@ #define logical int #define string char * #define integer int -#define object struct_objet * #define declareStructure typedef struct { #define declareUnion typedef union { @@ -139,6 +138,7 @@ #define target(a) (*a) #define address(a) (&a) +#define subroutine(name) int name() #define beginGroup { __CATCH_SYSTEM_ERROR__; #define endGroup __CATCH_SYSTEM_ERROR__; } #define beginMacro do beginGroup @@ -327,6 +327,8 @@ char *ptr1, *ptr2; \ int drapeau; \ unsigned long i; \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if (strcmp(version, _d_version_rpl) != 0) \ { \ notice(stdout, "Versions mismatch : library %s, expected %s\n", \ @@ -566,6 +568,8 @@ // Constantes symboliques #define createSymbolicConstant(rpl_object, type, value) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if ((strcmp(#type, "integer") != 0) && (strcmp(#type, "real") != 0)) \ systemError("Type not allowed for symbolic constant"); \ __taille_bloc = sizeof(t_8_bits) * 8; \ @@ -606,6 +610,8 @@ __constante--; } while(0) #define createSymbolicComplexConstant(rpl_object, rp, ip) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ __taille_bloc = sizeof(t_8_bits) * 8; \ __indice_bloc = (35 - 1) / __taille_bloc; \ __indice_bit = (35 - 1) % __taille_bloc; \ @@ -778,6 +784,8 @@ #define createVectorObject(rpl_object, size, otype, structure, cat) do { \ integer8 i; \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if (rpl_object != NULL) \ systemError("Reallocated object"); \ if ((rpl_object = allocation(cat)) == NULL) \ @@ -900,7 +908,7 @@ else executionError("Type mismatch error"); } while(0) #define createRealVectorObject(rpl_object, size) \ - createVectorObject(object, size, real8, struct_vecteur, VRL) + createVectorObject(rpl_object, size, real8, struct_vecteur, VRL) // A FIXER @@ -957,6 +965,8 @@ #define elseIfIsName(rpl_object) } else if (isName(rpl_object)) #define setName(rpl_object, value) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ ifIsName(rpl_object) \ { \ if ((*rpl_object).nombre_occurrences > 1) \ @@ -982,6 +992,8 @@ (*((struct_nom *) (*rpl_object).objet)).symbole = d_vrai; } while(0) #define createNameObject(rpl_object) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if (rpl_object != NULL) \ systemError("Reallocated object"); \ if ((rpl_object = allocation(NOM)) == NULL) \ @@ -1001,6 +1013,8 @@ #define elseIfIsString(rpl_object) else if (isString(rpl_object)) #define setString(rpl_object, string) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ ifIsString(rpl_object) \ { \ if (string == NULL) executionError("Nullified string"); else \ @@ -1028,6 +1042,8 @@ else executionError("Type mismatch error"); } while(0) #define createStringObject(rpl_object) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if (rpl_object != NULL) \ systemError("Reallocated object"); \ if ((rpl_object = allocation(CHN)) == NULL) \ @@ -1052,6 +1068,8 @@ (*rpl_object).objet = NULL; } while(0) #define addObjectToList(list, rpl_object) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ ifIsList(list) \ { \ struct_objet *__tmp_rpl_object; \ @@ -1085,6 +1103,8 @@ else executionError("Type mistmatch error"); } while(0) #define insertObjectIntoList(list, rpl_object) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ ifIsList(list) \ { \ struct_objet *__tmp_rpl_object; \ @@ -1115,6 +1135,8 @@ else executionError("Type mistmatch error"); } while(0) #define removeObjectFromList(list, rpl_object) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ ifIsList(list) \ { \ if ((*list).objet != NULL) \ @@ -1176,10 +1198,15 @@ #define size(a) sizeof(a) #define allocate(a) ({ void *ptr; \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ if ((ptr = malloc(a)) == NULL) \ systemError("Memory allocation error"); ptr; }) -#define deallocate(a) free(a) +#define deallocate(a) do { \ + struct_processus *s_etat_processus; \ + s_etat_processus = (*rpl_arguments).s_etat_processus; \ + free(a); } while(0) /* --------------------------------------------------------------------------------