XBT_OUT;
}
-static void add_free_f(xbt_dynar_t dynar,void_f_pvoid_t free_f) {
+/*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));
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;
}
static void parse_statement(char *definition,
/* FIXME: This does not detect recursive definitions at all? */
if (identifier.tm.is_union || identifier.tm.is_enum || identifier.tm.is_struct)
- PARSE_ERROR0("Cannot handle recursive type definition yet");
+ PARSE_ERROR0("Unimplemented feature: GRAS_DEFINE_TYPE cannot handle recursive type definition yet");
/**** get the base type, giving "short a" the needed love ****/
if (!identifier.tm.is_union &&
/**** build the base type for latter use ****/
if (identifier.tm.is_union) {
- PARSE_ERROR0("Cannot handle union yet (get callback from annotation?)");
+ PARSE_ERROR0("Unimplemented feature: GRAS_DEFINE_TYPE cannot handle union yet (get callback from annotation?)");
} else if (identifier.tm.is_enum) {
- PARSE_ERROR0("Cannot handle enum yet");
+ PARSE_ERROR0("Unimplemented feature: GRAS_DEFINE_TYPE cannot handle enum yet");
} else if (identifier.tm.is_struct) {
sprintf(buffname,"struct %s",identifier.type_name);
/* Handle fixed size arrays */
gras_ddt_parse_tok_num = gras_ddt_parse_lex_n_dump();
if (gras_ddt_parse_tok_num == GRAS_DDT_PARSE_TOKEN_RB) {
- PARSE_ERROR0("Cannot deal with [] constructs (yet)");
+ PARSE_ERROR0("Unimplemented feature: GRAS_DEFINE_TYPE cannot deal with [] constructs (yet)");
} else if (gras_ddt_parse_tok_num == GRAS_DDT_PARSE_TOKEN_WORD) {
char *end;
parse_type_modifier(&tm);
if (tm.is_ref)
- PARSE_ERROR0("Cannot handle reference without annotation");
+ PARSE_ERROR0("GRAS_DEFINE_TYPE cannot handle reference without annotation");
/* get the aliasing name */
if (gras_ddt_parse_tok_num != GRAS_DDT_PARSE_TOKEN_WORD)
gras_ddt_parse_text);
/* (FIXME: should) build the alias */
- PARSE_ERROR0("Cannot handle typedef yet");
+ PARSE_ERROR0("Unimplemented feature: GRAS_DEFINE_TYPE cannot handle typedef yet");
XBT_OUT;
return typedef_desc;
int *stored = xbt_new(int, 1);
*stored=value;
- xbt_dict_set(gras_dd_constants,name, stored, free);
+ xbt_dict_set(gras_dd_constants,name, stored, xbt_free_f);
}