X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=types%2Farray.c;h=02a154e9ab148ea9abd843821a2ae6eca13ac4fc;hp=6dd3b9ca8a6c869e419ef17c54ff9141ebf8c31f;hb=05628561ca57ff5d269571a72a12cb86854c5f70;hpb=e19c3d69b39d2fa422ab54b5ec7192799f536680 diff --git a/types/array.c b/types/array.c index 6dd3b9ca..02a154e9 100644 --- a/types/array.c +++ b/types/array.c @@ -38,8 +38,8 @@ void array_copy(struct stream_pos *dest, const struct format *fdest, fdest->array_begin(dest, array_type); for (i = 0; i < array_type->len; i++) { - struct type *elem_type = array->current_element.type; - elem_type->p.type->copy(dest, fdest, src, fsrc, elem_type); + struct declaration *elem = array->current_element.declaration; + elem->type->copy(dest, fdest, src, fsrc, elem); } fsrc->array_end(src, array_type); fdest->array_end(dest, array_type); @@ -51,22 +51,25 @@ void _array_type_free(struct type *type) struct type_array *array_type = container_of(type, struct type_array, p); + free_type_scope(array_type->scope); type_unref(array_type->elem); g_free(array_type); } struct type_array * - array_type_new(const char *name, size_t len, struct type *elem_type) + array_type_new(const char *name, size_t len, struct type *elem_type, + struct type_scope *parent_scope) { struct type_array *array_type; struct type *type; - int ret; array_type = g_new(struct type_array, 1); type = &array_type->p; array_type->len = len; type_ref(elem_type); array_type->elem = elem_type; + array_type->scope = new_type_scope(parent_scope); + type->id = CTF_TYPE_ARRAY; type->name = g_quark_from_string(name); /* No need to align the array, the first element will align itself */ type->alignment = 1; @@ -75,18 +78,7 @@ struct type_array * type->declaration_new = _array_declaration_new; type->declaration_free = _array_declaration_free; type->ref = 1; - - if (type->name) { - ret = register_type(type); - if (ret) - goto error_register; - } return array_type; - -error_register: - type_unref(array_type->elem); - g_free(array_type); - return NULL; } static @@ -100,24 +92,25 @@ struct declaration * array = g_new(struct declaration_array, 1); type_ref(&array_type->p); - array->p.type = array_type; + array->p.type = type; + array->type = array_type; array->p.ref = 1; array->scope = new_declaration_scope(parent_scope); array->current_element.declaration = - array_type->elem.p->declaration_new(&array_type->elem.p, - parent_scope); + array_type->elem->declaration_new(array_type->elem, + parent_scope); return &array->p; } static void _array_declaration_free(struct declaration *declaration) { - struct type_array *array = - container_of(declaration, struct type_array, p); + struct declaration_array *array = + container_of(declaration, struct declaration_array, p); struct declaration *elem_declaration = array->current_element.declaration; - elem_type->p.type->declaration_free(elem_type); + elem_declaration->type->declaration_free(elem_declaration); free_declaration_scope(array->scope); type_unref(array->p.type); g_free(array);