[LIB]: Introduce class__tags()

Also preparatory for struct namespace.

Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
This commit is contained in:
Arnaldo Carvalho de Melo 2007-05-24 12:07:41 -03:00
parent 230d9310aa
commit c1eff2b2ca
3 changed files with 20 additions and 15 deletions

View File

@ -154,7 +154,7 @@ static void class__remove_member(struct class *self, const struct cu *cu,
/*
* Is this the first member?
*/
if (member->tag.node.prev == &self->type.tags) {
if (member->tag.node.prev == class__tags(self)) {
self->type.size -= size;
class__subtract_offsets_from(self, cu, member, size);
} else {

View File

@ -143,6 +143,11 @@ extern struct class *class__clone(const struct class *from,
const char *new_class_name);
extern void class__delete(struct class *self);
static inline struct list_head *class__tags(struct class *self)
{
return &self->type.tags;
}
static inline const char *type__name(const struct type *self)
{
return self->name;

View File

@ -18,9 +18,9 @@ void class__subtract_offsets_from(struct class *self, const struct cu *cu,
const uint16_t size)
{
struct class_member *member =
list_prepare_entry(from, &self->type.tags, tag.node);
list_prepare_entry(from, class__tags(self), tag.node);
list_for_each_entry_continue(member, &self->type.tags, tag.node)
list_for_each_entry_continue(member, class__tags(self), tag.node)
if (member->tag.tag == DW_TAG_member)
member->offset -= size;
@ -45,10 +45,10 @@ static struct class_member *
const struct cu *cu, size_t size)
{
struct class_member *member =
list_prepare_entry(from, &class->type.tags, tag.node);
list_prepare_entry(from, class__tags(class), tag.node);
struct class_member *bitfield_head = NULL;
list_for_each_entry_continue(member, &class->type.tags, tag.node) {
list_for_each_entry_continue(member, class__tags(class), tag.node) {
if (member->tag.tag != DW_TAG_member)
continue;
if (member->bit_size != 0) {
@ -74,7 +74,7 @@ static struct class_member *
{
struct class_member *member;
list_for_each_entry_reverse(member, &class->type.tags, tag.node) {
list_for_each_entry_reverse(member, class__tags(class), tag.node) {
size_t member_size;
if (member->tag.tag != DW_TAG_member)
@ -107,9 +107,9 @@ static struct class_member *
size_t size)
{
struct class_member *member =
list_prepare_entry(from, &class->type.tags, tag.node);
list_prepare_entry(from, class__tags(class), tag.node);
list_for_each_entry_continue(member, &class->type.tags, tag.node) {
list_for_each_entry_continue(member, class__tags(class), tag.node) {
if (member->tag.tag != DW_TAG_member)
continue;
if (member->bit_hole != 0 &&
@ -162,7 +162,7 @@ static void class__move_member(struct class *class, struct class_member *dest,
if (from->bit_size != 0) {
struct class_member *pos =
list_prepare_entry(from, &class->type.tags,
list_prepare_entry(from, class__tags(class),
tag.node);
struct class_member *tmp;
uint8_t orig_tail_from_bit_hole;
@ -170,7 +170,7 @@ static void class__move_member(struct class *class, struct class_member *dest,
if (verbose)
fprintf(fp, " bitfield('%s' ... ", from->name);
list_for_each_entry_safe_from(pos, tmp, &class->type.tags,
list_for_each_entry_safe_from(pos, tmp, class__tags(class),
tag.node) {
if (pos->tag.tag != DW_TAG_member)
continue;
@ -279,7 +279,7 @@ static void class__move_bit_member(struct class *class, const struct cu *cu,
struct class_member,
tag.node);
const uint8_t is_last_member = (from->tag.node.next ==
&class->type.tags);
class__tags(class));
if (verbose)
fprintf(fp, "/* Moving '%s:%u' from after '%s' to "
@ -354,9 +354,9 @@ static void class__demote_bitfield_members(struct class *class,
{
const uint8_t bit_diff = (old_type->size - new_type->size) * 8;
struct class_member *member =
list_prepare_entry(from, &class->type.tags, tag.node);
list_prepare_entry(from, class__tags(class), tag.node);
list_for_each_entry_from(member, &class->type.tags, tag.node) {
list_for_each_entry_from(member, class__tags(class), tag.node) {
if (member->tag.tag != DW_TAG_member)
continue;
/*
@ -564,9 +564,9 @@ static void class__fixup_bitfield_types(const struct class *self,
Dwarf_Off type)
{
struct class_member *member =
list_prepare_entry(from, &self->type.tags, tag.node);
list_prepare_entry(from, class__tags(self), tag.node);
list_for_each_entry_from(member, &self->type.tags, tag.node) {
list_for_each_entry_from(member, class__tags(self), tag.node) {
if (member->tag.tag != DW_TAG_member)
continue;
if (member == to_before)