assert(array);
/* unref previous array */
if (_enum->value)
- g_array_unref(_enum->value, TRUE);
+ g_array_unref(_enum->value);
_enum->value = array;
/*
* Arbitrarily choose the first one.
void _enum_type_free(struct type *type)
{
struct type_enum *enum_type =
- container_of(type, struct enum_type, p);
+ container_of(type, struct type_enum, p);
struct enum_range_to_quark *iter, *tmp;
g_hash_table_destroy(enum_type->table.value_to_quark_set);
g_free(iter);
}
g_hash_table_destroy(enum_type->table.quark_to_range_set);
- type_unref(enum_type->integer_type);
+ type_unref(&enum_type->integer_type->p);
g_free(enum_type);
}
_enum_type_new(const char *name, struct type_integer *integer_type)
{
struct type_enum *enum_type;
- int ret;
enum_type = g_new(struct type_enum, 1);
enum_type->table.quark_to_range_set = g_hash_table_new_full(g_int_hash,
g_int_equal,
NULL, enum_range_set_free);
- type_ref(integer_type);
+ type_ref(&integer_type->p);
enum_type->integer_type = integer_type;
+ enum_type->p.id = CTF_TYPE_ENUM;
enum_type->p.name = g_quark_from_string(name);
enum_type->p.alignment = 1;
enum_type->p.copy = enum_copy;
enum_type->p.declaration_new = _enum_declaration_new;
enum_type->p.declaration_free = _enum_declaration_free;
enum_type->p.ref = 1;
- if (enum_type->p.name) {
- ret = register_type(&enum_type->p);
- if (ret)
- goto register_error;
- }
return enum_type;
-
-register_error:
- g_hash_table_destroy(enum_type->table.value_to_quark_set);
- g_hash_table_destroy(enum_type->table.quark_to_range_set);
- type_unref(enum_type->integer_type);
- g_free(enum_type);
- return NULL;
}
static
struct type_enum *enum_type =
container_of(type, struct type_enum, p);
struct declaration_enum *_enum;
- struct declaration_integer_parent *declaration_integer_parent;
+ struct declaration *declaration_integer_parent;
_enum = g_new(struct declaration_enum, 1);
type_ref(&enum_type->p);
- _enum->p.type = enum_type;
+ _enum->p.type = type;
+ _enum->type = enum_type;
_enum->p.ref = 1;
_enum->value = NULL;
declaration_integer_parent =
struct declaration_enum *_enum =
container_of(declaration, struct declaration_enum, p);
- declaration_unref(_enum->integer);
+ declaration_unref(&_enum->integer->p);
type_unref(_enum->p.type);
if (_enum->value)
- g_array_unref(_enum->value, TRUE);
+ g_array_unref(_enum->value);
g_free(_enum);
}