static void dw_type_free_voidp(void *t)
{
- dw_type_free((dw_type_t) * (void **) t);
+ delete *(dw_type_t*)t;
}
/** \brief Populate the list of members of a type
const char *ns)
{
- dw_type_t type = xbt_new0(s_dw_type_t, 1);
+ dw_type_t type = new s_dw_type();
type->type = -1;
type->id = 0;
type->name = NULL;
xbt_free(frame);
}
-void dw_type_free(dw_type_t t)
+s_dw_type::s_dw_type()
{
- xbt_free(t->name);
- xbt_free(t->dw_type_id);
- xbt_dynar_free(&(t->members));
- mc_dwarf_expression_clear(&t->location);
- xbt_free(t);
+}
+
+s_dw_type::~s_dw_type()
+{
+ xbt_free(this->name);
+ xbt_free(this->dw_type_id);
+ xbt_dynar_free(&this->members);
+ mc_dwarf_expression_clear(&this->location);
+}
+
+static void dw_type_free(dw_type_t t)
+{
+ delete t;
}
void dw_variable_free(dw_variable_t v)
typedef int e_dw_type_type;
struct s_dw_type {
- e_dw_type_type type;
- Dwarf_Off id; /* Offset in the section (in hexadecimal form) */
- char *name; /* Name of the type */
- int byte_size; /* Size in bytes */
- int element_count; /* Number of elements for array type */
- char *dw_type_id; /* DW_AT_type id */
- xbt_dynar_t members; /* if DW_TAG_structure_type, DW_TAG_class_type, DW_TAG_union_type*/
- int is_pointer_type;
+ s_dw_type();
+ ~s_dw_type();
+
+ e_dw_type_type type = 0;
+ Dwarf_Off id = 0; /* Offset in the section (in hexadecimal form) */
+ char *name = nullptr; /* Name of the type */
+ int byte_size = 0; /* Size in bytes */
+ int element_count = 0; /* Number of elements for array type */
+ char *dw_type_id = nullptr; /* DW_AT_type id */
+ xbt_dynar_t members = nullptr; /* if DW_TAG_structure_type, DW_TAG_class_type, DW_TAG_union_type*/
+ int is_pointer_type = 0;
// Location (for members) is either of:
- struct s_mc_expression location;
- int offset;
+ struct s_mc_expression location = { 0, 0, 0, 0 };
+ int offset = 0;
- dw_type_t subtype; // DW_AT_type
- dw_type_t full_type; // The same (but more complete) type
+ dw_type_t subtype = nullptr; // DW_AT_type
+ dw_type_t full_type = nullptr; // The same (but more complete) type
};
-XBT_INTERNAL void dw_type_free(dw_type_t t);
XBT_INTERNAL void dw_variable_free(dw_variable_t v);
XBT_INTERNAL void dw_variable_free_voidp(void *t);