- type_class->name = g_quark_from_string(name);
- type_class->alignment = alignment;
- type_class->copy = float_copy;
- type_class->free = _float_type_free;
- float_class->byte_order = byte_order;
-
- float_class->sign = integer_type_new(NULL, 1,
- byte_order, false, 1);
- if (!float_class->mantissa)
- goto error_sign;
- float_class->mantissa = integer_type_new(NULL, mantissa_len - 1,
- byte_order, false, 1);
- if (!float_class->mantissa)
- goto error_mantissa;
- float_class->exp = integer_type_new(NULL, exp_len,
- byte_order, true, 1);
- if (!float_class->exp)
- goto error_exp;
+ _float = g_new(struct definition_float, 1);
+ bt_declaration_ref(&float_declaration->p);
+ _float->p.declaration = declaration;
+ _float->declaration = float_declaration;
+ _float->p.scope = bt_new_definition_scope(parent_scope, field_name, root_name);
+ _float->p.path = bt_new_definition_path(parent_scope, field_name, root_name);
+ if (float_declaration->byte_order == LITTLE_ENDIAN) {
+ tmp = float_declaration->mantissa->p.definition_new(&float_declaration->mantissa->p,
+ _float->p.scope, g_quark_from_static_string("mantissa"), 0, NULL);
+ _float->mantissa = container_of(tmp, struct definition_integer, p);
+ tmp = float_declaration->exp->p.definition_new(&float_declaration->exp->p,
+ _float->p.scope, g_quark_from_static_string("exp"), 1, NULL);
+ _float->exp = container_of(tmp, struct definition_integer, p);
+ tmp = float_declaration->sign->p.definition_new(&float_declaration->sign->p,
+ _float->p.scope, g_quark_from_static_string("sign"), 2, NULL);
+ _float->sign = container_of(tmp, struct definition_integer, p);
+ } else {
+ tmp = float_declaration->sign->p.definition_new(&float_declaration->sign->p,
+ _float->p.scope, g_quark_from_static_string("sign"), 0, NULL);
+ _float->sign = container_of(tmp, struct definition_integer, p);
+ tmp = float_declaration->exp->p.definition_new(&float_declaration->exp->p,
+ _float->p.scope, g_quark_from_static_string("exp"), 1, NULL);
+ _float->exp = container_of(tmp, struct definition_integer, p);
+ tmp = float_declaration->mantissa->p.definition_new(&float_declaration->mantissa->p,
+ _float->p.scope, g_quark_from_static_string("mantissa"), 2, NULL);
+ _float->mantissa = container_of(tmp, struct definition_integer, p);
+ }
+ _float->p.ref = 1;
+ /*
+ * Use INT_MAX order to ensure that all fields of the parent
+ * scope are seen as being prior to this scope.
+ */
+ _float->p.index = root_name ? INT_MAX : index;
+ _float->p.name = field_name;
+ _float->value = 0.0;
+ if (parent_scope) {
+ int ret;