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; \
|
||||
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 {
|
||||
BT_FP_SINGLE = 1,
|
||||
BT_FP_DOUBLE,
|
||||
|
|
|
@ -21,11 +21,9 @@ void class__subtract_offsets_from(struct class *class,
|
|||
struct class_member *from,
|
||||
const uint16_t size)
|
||||
{
|
||||
struct class_member *member =
|
||||
list_prepare_entry(from, class__tags(class), tag.node);
|
||||
struct class_member *member;
|
||||
|
||||
list_for_each_entry_continue(member, class__tags(class), tag.node)
|
||||
if (member->tag.tag == DW_TAG_member) {
|
||||
class__for_each_member_continue(class, from, member) {
|
||||
member->byte_offset -= size;
|
||||
member->bit_offset -= size * 8;
|
||||
}
|
||||
|
@ -46,11 +44,9 @@ void class__subtract_offsets_from(struct class *class,
|
|||
void class__add_offsets_from(struct class *class, struct class_member *from,
|
||||
const uint16_t size)
|
||||
{
|
||||
struct class_member *member =
|
||||
list_prepare_entry(from, class__tags(class), tag.node);
|
||||
struct class_member *member;
|
||||
|
||||
list_for_each_entry_continue(member, class__tags(class), tag.node)
|
||||
if (member->tag.tag == DW_TAG_member) {
|
||||
class__for_each_member_continue(class, from, member) {
|
||||
member->byte_offset += size;
|
||||
member->bit_offset += size * 8;
|
||||
}
|
||||
|
@ -137,13 +133,10 @@ static struct class_member *
|
|||
class__find_next_hole_of_size(struct class *class,
|
||||
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 *member;
|
||||
|
||||
list_for_each_entry_continue(member, class__tags(class), tag.node) {
|
||||
if (member->tag.tag != DW_TAG_member)
|
||||
continue;
|
||||
class__for_each_member_continue(class, from, member) {
|
||||
if (member->bitfield_size != 0) {
|
||||
if (bitfield_head == NULL)
|
||||
bitfield_head = member;
|
||||
|
@ -197,10 +190,9 @@ static struct class_member *
|
|||
struct class_member *from,
|
||||
size_t size)
|
||||
{
|
||||
struct class_member *member =
|
||||
list_prepare_entry(from, class__tags(class), tag.node);
|
||||
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->bit_hole != 0 &&
|
||||
|
|
Loading…
Reference in New Issue