From: Gabriel Corona Date: Mon, 8 Jun 2015 21:31:55 +0000 (+0200) Subject: [mc] Give ctor/dtor for s_dw_type X-Git-Tag: v3_12~638^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/a8bf05ce64a2a97cce680d9bdcff3c6129f9d93c?hp=c7e058ac1143ed684438971ac1e1859ee22e16f1 [mc] Give ctor/dtor for s_dw_type --- diff --git a/src/mc/mc_dwarf.cpp b/src/mc/mc_dwarf.cpp index 4369550a35..f2c702eca4 100644 --- a/src/mc/mc_dwarf.cpp +++ b/src/mc/mc_dwarf.cpp @@ -559,7 +559,7 @@ static void MC_dwarf_fill_member_location(dw_type_t type, dw_type_t member, 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 @@ -639,7 +639,7 @@ static dw_type_t MC_dwarf_die_to_type(mc_object_info_t info, Dwarf_Die * die, 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; @@ -1072,13 +1072,21 @@ void mc_frame_free(dw_frame_t frame) 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) diff --git a/src/mc/mc_object_info.h b/src/mc/mc_object_info.h index 4843d338e4..4c02bca005 100644 --- a/src/mc/mc_object_info.h +++ b/src/mc/mc_object_info.h @@ -30,24 +30,26 @@ SG_BEGIN_DECL(); 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);