container_of(type, struct type_struct, p);
unsigned long i;
+ free_type_scope(struct_type->scope);
g_hash_table_destroy(struct_type->fields_by_name);
for (i = 0; i < struct_type->fields->len; i++) {
g_free(struct_type);
}
-struct type_struct *struct_type_new(const char *name)
+struct type_struct *struct_type_new(const char *name,
+ struct type_scope *parent_scope)
{
struct type_struct *struct_type;
struct type *type;
struct_type->fields = g_array_sized_new(FALSE, TRUE,
sizeof(struct type_field),
DEFAULT_NR_STRUCT_FIELDS);
+ struct_type->scope = new_type_scope(parent_scope);
type->name = g_quark_from_string(name);
type->alignment = 1;
type->copy = struct_copy;
struct type_struct *struct_type =
container_of(type, struct type_struct, p);
struct declaration_struct *_struct;
+ unsigned long i;
+ int ret;
_struct = g_new(struct declaration_struct, 1);
type_ref(&struct_type->p);
_struct->fields = g_array_sized_new(FALSE, TRUE,
sizeof(struct field),
DEFAULT_NR_STRUCT_FIELDS);
+ g_array_set_size(_struct->fields, struct_type->fields->len);
+ for (i = 0; i < struct_type->fields->len; i++) {
+ struct type_field *type_field =
+ &g_array_index(struct_type->fields,
+ struct type_field, i);
+ struct field *field = &g_array_index(_struct->fields,
+ struct field, i);
+
+ field->name = type_field->name;
+ field->declaration =
+ type_field->type->declaration_new(type_field->type,
+ _struct->scope);
+ ret = register_declaration(field->name,
+ field->declaration, _struct->scope);
+ assert(!ret);
+ }
return &_struct->p;
}
container_of(declaration, struct declaration_struct, p);
unsigned long i;
+ assert(_struct->fields->len == _struct->type->fields->len);
for (i = 0; i < _struct->fields->len; i++) {
struct field *field = &g_array_index(_struct->fields,
struct field, i);