#include <glib.h>
static
-struct declaration *_enum_declaration_new(struct type *type,
- struct declaration_scope *parent_scope);
+struct definition *_enum_definition_new(struct type *type,
+ struct definition_scope *parent_scope);
static
-void _enum_declaration_free(struct declaration *declaration);
+void _enum_definition_free(struct definition *definition);
static
void enum_range_set_free(void *ptr)
void enum_copy(struct stream_pos *dest, const struct format *fdest,
struct stream_pos *src, const struct format *fsrc,
- struct declaration *declaration)
+ struct definition *definition)
{
- struct declaration_enum *_enum =
- container_of(declaration, struct declaration_enum, p);
+ struct definition_enum *_enum =
+ container_of(definition, struct definition_enum, p);
struct type_enum *enum_type= _enum->type;
GArray *array;
GQuark v;
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.type_free = _enum_type_free;
- enum_type->p.declaration_new = _enum_declaration_new;
- enum_type->p.declaration_free = _enum_declaration_free;
+ enum_type->p.definition_new = _enum_definition_new;
+ enum_type->p.definition_free = _enum_definition_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 declaration *
- _enum_declaration_new(struct type *type,
- struct declaration_scope *parent_scope)
+struct definition *
+ _enum_definition_new(struct type *type,
+ struct definition_scope *parent_scope)
{
struct type_enum *enum_type =
container_of(type, struct type_enum, p);
- struct declaration_enum *_enum;
- struct declaration_integer_parent *declaration_integer_parent;
+ struct definition_enum *_enum;
+ struct definition *definition_integer_parent;
- _enum = g_new(struct declaration_enum, 1);
+ _enum = g_new(struct definition_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 =
- enum_type->integer_type->p.declaration_new(&enum_type->integer_type->p,
+ definition_integer_parent =
+ enum_type->integer_type->p.definition_new(&enum_type->integer_type->p,
parent_scope);
- _enum->integer = container_of(declaration_integer_parent,
- struct declaration_integer, p);
+ _enum->integer = container_of(definition_integer_parent,
+ struct definition_integer, p);
return &_enum->p;
}
static
-void _enum_declaration_free(struct declaration *declaration)
+void _enum_definition_free(struct definition *definition)
{
- struct declaration_enum *_enum =
- container_of(declaration, struct declaration_enum, p);
+ struct definition_enum *_enum =
+ container_of(definition, struct definition_enum, p);
- declaration_unref(_enum->integer);
+ definition_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);
}