#include "DataDesc/datadesc_private.h"
-GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(new,datadesc);
+GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(create,datadesc);
/**
* gras_ddt_freev:
gras_dd_cat_field_t *field;
int arch;
- gras_assert1(!struct_type->category.struct_data.closed,
- "Cannot add anything to the already closed struct %s",
- struct_type->name);
- gras_assert1(field_type->size >= 0,
- "Cannot add a dynamically sized field in structure %s",
- struct_type->name);
+ gras_assert1(!struct_type->category.struct_data.closed,
+ "Cannot add anything to the already closed struct %s",
+ struct_type->name);
+ gras_assert1(field_type->size >= 0,
+ "Cannot add a dynamically sized field in structure %s",
+ struct_type->name);
field=malloc(sizeof(gras_dd_cat_field_t));
if (!field)
field->name = strdup(name);
+ DEBUG0("----------------");
+ DEBUG4("PRE s={size=%d,align=%d,asize=%d} struct_boundary=%d",
+ struct_type->size[GRAS_THISARCH],
+ struct_type->alignment[GRAS_THISARCH],
+ struct_type->aligned_size[GRAS_THISARCH],
+ gras_arches[GRAS_THISARCH].struct_boundary);
+
+
for (arch=0; arch<gras_arch_count; arch ++) {
field->offset[arch] = aligned(struct_type->size[arch],
- field_type->alignment[arch]);
- }
- field->code = field_type->code;
- field->pre = NULL;
- field->post = NULL;
-
- TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
+ min(field_type->alignment[arch],
+ gras_arches[arch].struct_boundary));
- for (arch=0; arch<gras_arch_count; arch ++) {
struct_type->size[arch] = field->offset[arch] + field_type->size[arch];
struct_type->alignment[arch] = max(struct_type->alignment[arch],
field_type->alignment[arch]);
struct_type->aligned_size[arch] = aligned(struct_type->size[arch],
struct_type->alignment[arch]);
}
+ field->code = field_type->code;
+ field->pre = NULL;
+ field->post = NULL;
+
+ TRY(gras_dynar_push(struct_type->category.struct_data.fields, &field));
DEBUG3("Push a %s into %s at offset %d.",
field_type->name, struct_type->name,field->offset[GRAS_THISARCH]);
DEBUG3(" f={size=%d,align=%d,asize=%d}",
field_type->size[GRAS_THISARCH],
- field_type->alignment, field_type->aligned_size);
+ field_type->alignment[GRAS_THISARCH],
+ field_type->aligned_size[GRAS_THISARCH]);
DEBUG3(" s={size=%d,align=%d,asize=%d}",
struct_type->size[GRAS_THISARCH],
- struct_type->alignment, struct_type->aligned_size);
+ struct_type->alignment[GRAS_THISARCH],
+ struct_type->aligned_size[GRAS_THISARCH]);
return no_error;
}
void
gras_datadesc_declare_struct_close(gras_datadesc_type_t *struct_type) {
struct_type->category.struct_data.closed = 1;
- INFO0("FIXME: Do something in gras_datadesc_declare_struct_close");
+ // INFO0("FIXME: Do something in gras_datadesc_declare_struct_close");
}
/**
* Create a new union and give a pointer to it
*/
gras_error_t
-gras_datadesc_declare_union(const char *name,
- gras_datadesc_type_cb_int_t selector,
- gras_datadesc_type_t **dst) {
+gras_datadesc_declare_union(const char *name,
+ gras_datadesc_type_cb_int_t selector,
+ gras_datadesc_type_t **dst) {
gras_error_t errcode;
gras_datadesc_type_t *res;
void
gras_datadesc_declare_union_close(gras_datadesc_type_t *union_type) {
union_type->category.union_data.closed = 1;
- INFO0("FIXME: Do something in gras_datadesc_declare_array_close");
+ // INFO0("FIXME: Do something in gras_datadesc_declare_union_close");
}
/**
* gras_datadesc_declare_ref: