+ XBT_OUT;
+}
+
+static void change_to_fixed_array(xbt_dynar_t dynar, long int size) {
+ s_identifier_t former,array;
+ memset(&array,0,sizeof(array));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ array.type_name=(char*)xbt_malloc(strlen(former.type->name)+48);
+ DEBUG2("Array specification (size=%ld, elm='%s'), change pushed type",
+ size,former.type_name);
+ sprintf(array.type_name,"%s%s%s%s[%ld]",
+ (former.tm.is_unsigned?"u ":""),
+ (former.tm.is_short?"s ":""),
+ (former.tm.is_long?"l ":""),
+ former.type_name,
+ size);
+ free(former.type_name);
+
+ array.type = gras_datadesc_array_fixed(array.type_name, former.type, size); /* redeclaration are ignored */
+ array.name = former.name;
+
+ xbt_dynar_push(dynar,&array);
+ XBT_OUT;
+}
+static void change_to_ref(xbt_dynar_t dynar) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ ref.type_name=(char*)xbt_malloc(strlen(former.type->name)+2);
+ DEBUG1("Ref specification (elm='%s'), change pushed type", former.type_name);
+ sprintf(ref.type_name,"%s*",former.type_name);
+ free(former.type_name);
+
+ ref.type = gras_datadesc_ref(ref.type_name, former.type); /* redeclaration are ignored */
+ ref.name = former.name;
+
+ xbt_dynar_push(dynar,&ref);
+ XBT_OUT;
+}
+
+static void change_to_ref_pop_array(xbt_dynar_t dynar) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ ref.type = gras_datadesc_ref_pop_arr(former.type); /* redeclaration are ignored */
+ ref.type_name = (char*)strdup(ref.type->name);
+ ref.name = former.name;
+
+ free(former.type_name);
+
+ xbt_dynar_push(dynar,&ref);
+ XBT_OUT;
+}
+
+static void change_to_dynar_of(xbt_dynar_t dynar,gras_datadesc_type_t subtype) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ ref.type = gras_datadesc_dynar(subtype,NULL); /* redeclaration are ignored */
+ ref.type_name = (char*)strdup(ref.type->name);
+ ref.name = former.name;
+
+ free(former.type_name);
+
+ xbt_dynar_push(dynar,&ref);
+ XBT_OUT;
+}
+
+static void change_to_matrix_of(xbt_dynar_t dynar,gras_datadesc_type_t subtype) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ ref.type = gras_datadesc_matrix(subtype,NULL); /* redeclaration are ignored */
+ ref.type_name = (char*)strdup(ref.type->name);
+ ref.name = former.name;
+
+ free(former.type_name);
+
+ xbt_dynar_push(dynar,&ref);
+ XBT_OUT;
+}
+
+/*static void add_free_f(xbt_dynar_t dynar,void_f_pvoid_t free_f) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ memcpy(former.type->extra,&free_f, sizeof(free_f));
+ xbt_dynar_push(dynar,&former);
+ XBT_OUT;
+}*/
+
+static void add_free_f(xbt_dynar_t dynar,void_f_pvoid_t* free_f) {
+ s_identifier_t former,ref;
+ memset(&ref,0,sizeof(ref));
+
+ XBT_IN;
+ xbt_dynar_pop(dynar,&former);
+ memcpy(former.type->extra,free_f, sizeof(free_f));
+ xbt_dynar_push(dynar,&former);
+ XBT_OUT;