diff --git a/codiff.c b/codiff.c index 9c46833..57fc719 100644 --- a/codiff.c +++ b/codiff.c @@ -165,7 +165,7 @@ static int check_print_members_changes(const struct class *structure, int changes = 0; struct class_member *member; - list_for_each_entry(member, &structure->type.members, tag.node) { + type__for_each_member(&structure->type, member) { struct class_member *twin = class__find_member_by_name(new_structure, member->name); if (twin != NULL) @@ -371,7 +371,7 @@ static void show_nr_members_changes(const struct class *structure, struct class_member *member; /* Find the removed ones */ - list_for_each_entry(member, &structure->type.members, tag.node) { + type__for_each_member(&structure->type, member) { struct class_member *twin = class__find_member_by_name(new_structure, member->name); if (twin == NULL) @@ -379,7 +379,7 @@ static void show_nr_members_changes(const struct class *structure, } /* Find the new ones */ - list_for_each_entry(member, &new_structure->type.members, tag.node) { + type__for_each_member(&new_structure->type, member) { struct class_member *twin = class__find_member_by_name(structure, member->name); if (twin == NULL) diff --git a/ctracer.c b/ctracer.c index f54cb2e..6fd2423 100644 --- a/ctracer.c +++ b/ctracer.c @@ -179,7 +179,7 @@ static size_t class__find_biggest_member_name(const struct class *self) struct class_member *pos; size_t biggest_name_len = 0; - list_for_each_entry(pos, &self->type.members, tag.node) { + type__for_each_member(&self->type, pos) { const size_t len = strlen(pos->name); if (len > biggest_name_len) @@ -201,10 +201,9 @@ static void class__emit_class_state_collector(const struct class *self, "\tconst struct %s *obj = from;\n" "\tstruct %s *mini_obj = to;\n\n", class__name(self), class__name(clone)); - list_for_each_entry(pos, &clone->type.members, tag.node) { + type__for_each_member(&clone->type, pos) fprintf(fp_methods, "\tmini_obj->%-*s = obj->%s;\n", len, pos->name, pos->name); - } fputs("}\n\n", fp_methods); } @@ -318,7 +317,7 @@ static int class__emit_ostra_converter(const struct tag *tag_self, "\t\t\t\":", fp_converter); - list_for_each_entry(pos, &type->members, tag.node) { + type__for_each_member(type, pos) { if (first) first = 0; else { diff --git a/dwarves.c b/dwarves.c index e84cce5..48964ee 100644 --- a/dwarves.c +++ b/dwarves.c @@ -1284,7 +1284,7 @@ static size_t union__fprintf(const struct type *self, const struct cu *cu, uconf = *conf; uconf.indent = indent + 1; - list_for_each_entry(pos, &self->members, tag.node) { + type__for_each_member(self, pos) { struct tag *type = cu__find_tag_by_id(cu, pos->tag.type); printed += fprintf(fp, "%.*s", uconf.indent, tabs); @@ -1330,7 +1330,7 @@ static int type__clone_members(struct type *self, const struct type *from) self->nr_members = 0; INIT_LIST_HEAD(&self->members); - list_for_each_entry(pos, &from->members, tag.node) { + type__for_each_member(from, pos) { struct class_member *member_clone = class_member__clone(pos); if (member_clone == NULL) @@ -1515,7 +1515,7 @@ const struct class_member *class__find_bit_hole(const struct class *self, struct class_member *pos; const size_t byte_hole_size = bit_hole_size / 8; - list_for_each_entry(pos, &self->type.members, tag.node) + type__for_each_member(&self->type, pos) if (pos == trailer) break; else if (pos->hole >= byte_hole_size || @@ -1535,7 +1535,7 @@ void class__find_holes(struct class *self, const struct cu *cu) self->nr_holes = 0; self->nr_bit_holes = 0; - list_for_each_entry(pos, &ctype->members, tag.node) { + type__for_each_member(ctype, pos) { if (last != NULL) { const ssize_t cc_last_size = pos->offset - last->offset; @@ -1606,7 +1606,7 @@ int class__has_hole_ge(const struct class *self, const uint16_t size) if (self->nr_holes == 0) return 0; - list_for_each_entry(pos, &self->type.members, tag.node) + type__for_each_member(&self->type, pos) if (pos->hole >= size) return 1; @@ -1618,7 +1618,7 @@ struct class_member *type__find_member_by_name(const struct type *self, { if (name != NULL) { struct class_member *pos; - list_for_each_entry(pos, &self->members, tag.node) + type__for_each_member(self, pos) if (pos->name != NULL && strcmp(pos->name, name) == 0) return pos; } @@ -1631,7 +1631,7 @@ uint32_t type__nr_members_of_type(const struct type *self, const Dwarf_Off type) struct class_member *pos; uint32_t nr_members_of_type = 0; - list_for_each_entry(pos, &self->members, tag.node) + type__for_each_member(self, pos) if (pos->tag.type == type) ++nr_members_of_type; @@ -1943,7 +1943,7 @@ size_t class__fprintf(const struct class *self, const struct cu *cu, cconf.indent = indent + 1; - list_for_each_entry(pos, &tself->members, tag.node) { + type__for_each_member(tself, pos) { struct tag *type; if ((int)pos->offset != last_offset) diff --git a/dwarves.h b/dwarves.h index 2267248..43a5667 100644 --- a/dwarves.h +++ b/dwarves.h @@ -69,6 +69,9 @@ struct type { uint8_t fwd_decl_emitted:1; }; +#define type__for_each_member(self, pos) \ + list_for_each_entry(pos, &(self)->members, tag.node) + static inline struct type *tag__type(const struct tag *self) { return (struct type *)self; diff --git a/dwarves_emit.c b/dwarves_emit.c index 3ff2b88..bd8d280 100644 --- a/dwarves_emit.c +++ b/dwarves_emit.c @@ -275,7 +275,7 @@ int cus__emit_type_definitions(struct cus *self, struct cu *cu, cus__add_definition(self, ctype); - list_for_each_entry(pos, &ctype->members, tag.node) + type__for_each_member(ctype, pos) if (cus__emit_tag_definitions(self, cu, &pos->tag, fp)) printed = 1; diff --git a/dwarves_reorganize.c b/dwarves_reorganize.c index 9a052d3..2d79206 100644 --- a/dwarves_reorganize.c +++ b/dwarves_reorganize.c @@ -393,7 +393,7 @@ static int class__demote_bitfields(struct class *class, const struct cu *cu, size_t current_bitfield_size = 0, size, bytes_needed, new_size; int some_was_demoted = 0; - list_for_each_entry(member, &class->type.members, tag.node) { + type__for_each_member(&class->type, member) { /* * Check if we are moving away from a bitfield */ @@ -528,7 +528,7 @@ static void class__reorganize_bitfields(struct class *class, { struct class_member *member, *brother; restart: - list_for_each_entry(member, &class->type.members, tag.node) { + type__for_each_member(&class->type, member) { /* See if we have a hole after this member */ if (member->bit_hole != 0) { /* @@ -593,7 +593,7 @@ static void class__fixup_member_types(struct class *self, const struct cu *cu, struct class_member *pos, *bitfield_head = NULL; uint8_t fixup_was_done = 0; - list_for_each_entry(pos, &self->type.members, tag.node) { + type__for_each_member(&self->type, pos) { /* * Is this bitfield member? */ @@ -660,7 +660,7 @@ restart: struct class_member, tag.node); last_member_size = class_member__size(last_member, cu); - list_for_each_entry(member, &self->type.members, tag.node) { + type__for_each_member(&self->type, member) { /* See if we have a hole after this member */ if (member->hole != 0) { /* @@ -710,7 +710,7 @@ restart: if (self->nr_holes == 0) goto out; - list_for_each_entry(member, &self->type.members, tag.node) { + type__for_each_member(&self->type, member) { /* See if we have a hole after this member */ if (member->hole != 0) { brother = class__find_last_member_of_size(self, member, diff --git a/prefcnt.c b/prefcnt.c index 7e54c6c..134e73e 100644 --- a/prefcnt.c +++ b/prefcnt.c @@ -67,7 +67,7 @@ static void refcnt_tag(struct tag *tag, const struct cu *cu) if (tag->tag == DW_TAG_structure_type || tag->tag == DW_TAG_union_type) - list_for_each_entry(member, &tag__type(tag)->members, tag.node) + type__for_each_member(tag__type(tag), member) refcnt_member(member, cu); }