reorganize: Introduce class__for_each_member_continue()
To get a lot of boilerplate behind a nice helper. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
e7a56ee8cc
commit
10fef2916d
|
@ -1127,6 +1127,13 @@ const struct class_member *class__find_bit_hole(const struct class *cls,
|
||||||
continue; \
|
continue; \
|
||||||
else
|
else
|
||||||
|
|
||||||
|
#define class__for_each_member_continue(cls, from, pos) \
|
||||||
|
pos = list_prepare_entry(from, class__tags(cls), tag.node); \
|
||||||
|
list_for_each_entry_continue(pos, class__tags(cls), tag.node) \
|
||||||
|
if (!tag__is_class_member(&pos->tag)) \
|
||||||
|
continue; \
|
||||||
|
else
|
||||||
|
|
||||||
enum base_type_float_type {
|
enum base_type_float_type {
|
||||||
BT_FP_SINGLE = 1,
|
BT_FP_SINGLE = 1,
|
||||||
BT_FP_DOUBLE,
|
BT_FP_DOUBLE,
|
||||||
|
|
|
@ -21,14 +21,12 @@ void class__subtract_offsets_from(struct class *class,
|
||||||
struct class_member *from,
|
struct class_member *from,
|
||||||
const uint16_t size)
|
const uint16_t size)
|
||||||
{
|
{
|
||||||
struct class_member *member =
|
struct class_member *member;
|
||||||
list_prepare_entry(from, class__tags(class), tag.node);
|
|
||||||
|
|
||||||
list_for_each_entry_continue(member, class__tags(class), tag.node)
|
class__for_each_member_continue(class, from, member) {
|
||||||
if (member->tag.tag == DW_TAG_member) {
|
member->byte_offset -= size;
|
||||||
member->byte_offset -= size;
|
member->bit_offset -= size * 8;
|
||||||
member->bit_offset -= size * 8;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (class->padding != 0) {
|
if (class->padding != 0) {
|
||||||
struct class_member *last_member =
|
struct class_member *last_member =
|
||||||
|
@ -46,14 +44,12 @@ void class__subtract_offsets_from(struct class *class,
|
||||||
void class__add_offsets_from(struct class *class, struct class_member *from,
|
void class__add_offsets_from(struct class *class, struct class_member *from,
|
||||||
const uint16_t size)
|
const uint16_t size)
|
||||||
{
|
{
|
||||||
struct class_member *member =
|
struct class_member *member;
|
||||||
list_prepare_entry(from, class__tags(class), tag.node);
|
|
||||||
|
|
||||||
list_for_each_entry_continue(member, class__tags(class), tag.node)
|
class__for_each_member_continue(class, from, member) {
|
||||||
if (member->tag.tag == DW_TAG_member) {
|
member->byte_offset += size;
|
||||||
member->byte_offset += size;
|
member->bit_offset += size * 8;
|
||||||
member->bit_offset += size * 8;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -137,13 +133,10 @@ static struct class_member *
|
||||||
class__find_next_hole_of_size(struct class *class,
|
class__find_next_hole_of_size(struct class *class,
|
||||||
struct class_member *from, size_t size)
|
struct class_member *from, size_t size)
|
||||||
{
|
{
|
||||||
struct class_member *member =
|
|
||||||
list_prepare_entry(from, class__tags(class), tag.node);
|
|
||||||
struct class_member *bitfield_head = NULL;
|
struct class_member *bitfield_head = NULL;
|
||||||
|
struct class_member *member;
|
||||||
|
|
||||||
list_for_each_entry_continue(member, class__tags(class), tag.node) {
|
class__for_each_member_continue(class, from, member) {
|
||||||
if (member->tag.tag != DW_TAG_member)
|
|
||||||
continue;
|
|
||||||
if (member->bitfield_size != 0) {
|
if (member->bitfield_size != 0) {
|
||||||
if (bitfield_head == NULL)
|
if (bitfield_head == NULL)
|
||||||
bitfield_head = member;
|
bitfield_head = member;
|
||||||
|
@ -197,10 +190,9 @@ static struct class_member *
|
||||||
struct class_member *from,
|
struct class_member *from,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
struct class_member *member =
|
struct class_member *member;
|
||||||
list_prepare_entry(from, class__tags(class), tag.node);
|
|
||||||
|
|
||||||
list_for_each_entry_continue(member, class__tags(class), tag.node) {
|
class__for_each_member_continue(class, from, member) {
|
||||||
if (member->tag.tag != DW_TAG_member)
|
if (member->tag.tag != DW_TAG_member)
|
||||||
continue;
|
continue;
|
||||||
if (member->bit_hole != 0 &&
|
if (member->bit_hole != 0 &&
|
||||||
|
|
Loading…
Reference in New Issue