- array_class->len = len;
- type_ref(elem);
- array_class->elem = elem;
- type_class->name = g_quark_from_string(name);
- /* No need to align the array, the first element will align itself */
- type_class->alignment = 1;
- type_class->copy = array_copy;
- type_class->free = _array_type_free;
- type_class->ref = 1;
-
- if (type_class->name) {
- ret = ctf_register_type(type_class);
- if (ret)
- goto error_register;
+ str = g_string_new("");
+ g_string_printf(str, "[%" PRIu64 "]", i);
+ name = g_quark_from_string(str->str);
+ (void) g_string_free(str, TRUE);
+
+ field = &g_array_index(array->elems, struct field, i);
+ field->name = name;
+ field->definition = array_declaration->elem->definition_new(array_declaration->elem,
+ array->scope,
+ name, i);
+ }
+ return &array->p;
+}
+
+static
+void _array_definition_free(struct definition *definition)
+{
+ struct definition_array *array =
+ container_of(definition, struct definition_array, p);
+ uint64_t i;
+
+ for (i = 0; i < array->elems->len; i++) {
+ struct field *field;
+
+ field = &g_array_index(array->elems, struct field, i);
+ field->definition->declaration->definition_free(field->definition);