[PATCH 04/18] widl: refactor to have bitfield type's field use decl_spec_t rather than type_t
Richard Pospesel
richard at torproject.org
Wed Jun 5 20:34:01 CDT 2019
Signed-off-by: Richard Pospesel <richard at torproject.org>
---
tools/widl/header.c | 2 +-
tools/widl/typetree.c | 2 +-
tools/widl/typetree.h | 9 +++++++--
tools/widl/widltypes.h | 2 +-
4 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/tools/widl/header.c b/tools/widl/header.c
index 8c07564751..1c0a0ee040 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -423,7 +423,7 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
fprintf(h, "void");
break;
case TYPE_BITFIELD:
- write_type_left(h, type_bitfield_get_field(t), name_type, declonly);
+ write_type_left(h, type_bitfield_get_field_type(t), name_type, declonly);
break;
case TYPE_ALIAS:
case TYPE_FUNCTION:
diff --git a/tools/widl/typetree.c b/tools/widl/typetree.c
index 0a8ae0f3b2..9c8747ea67 100644
--- a/tools/widl/typetree.c
+++ b/tools/widl/typetree.c
@@ -408,7 +408,7 @@ type_t *type_new_bitfield(type_t *field, const expr_t *bits)
/* FIXME: validate bits->cval <= memsize(field) * 8 */
t = make_type(TYPE_BITFIELD);
- t->details.bitfield.field = field;
+ t->details.bitfield.field.type = field;
t->details.bitfield.bits = bits;
return t;
}
diff --git a/tools/widl/typetree.h b/tools/widl/typetree.h
index 22232fc0a7..6b745d2667 100644
--- a/tools/widl/typetree.h
+++ b/tools/widl/typetree.h
@@ -313,11 +313,16 @@ static inline unsigned char type_pointer_get_default_fc(const type_t *type)
return type->details.pointer.def_fc;
}
-static inline type_t *type_bitfield_get_field(const type_t *type)
+static inline const decl_spec_t *type_bitfield_get_field(const type_t *type)
{
type = type_get_real_type(type);
assert(type_get_type(type) == TYPE_BITFIELD);
- return type->details.bitfield.field;
+ return &type->details.bitfield.field;
+}
+
+static inline type_t *type_bitfield_get_field_type(const type_t *type)
+{
+ return type_bitfield_get_field(type)->type;
}
static inline const expr_t *type_bitfield_get_bits(const type_t *type)
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index bd727f70b6..59d5a284b2 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -390,7 +390,7 @@ struct pointer_details
struct bitfield_details
{
- struct _type_t *field;
+ struct _decl_spec_t field;
const expr_t *bits;
};
--
2.17.1
More information about the wine-devel
mailing list