[PATCH 3/5] widl: Introduce type_array_{get,set}_ptr_tfsoff().
Zebediah Figura
z.figura12 at gmail.com
Wed Aug 14 21:45:48 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
tools/widl/typegen.c | 17 +++++++++--------
tools/widl/typetree.h | 14 ++++++++++++++
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 47d12f59d1..e21aa5703c 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1011,8 +1011,9 @@ static unsigned char get_parameter_fc( const var_t *var, int is_return, unsigned
break;
case TGT_ARRAY:
*flags |= MustFree;
- if (type_array_is_decl_as_ptr(var->declspec.type) && var->declspec.type->details.array.ptr_tfsoff &&
- get_pointer_fc( var->declspec.type, var->attrs, !is_return ) == FC_RP)
+ if (type_array_is_decl_as_ptr(var->declspec.type)
+ && type_array_get_ptr_tfsoff(var->declspec.type)
+ && get_pointer_fc(var->declspec.type, var->attrs, !is_return) == FC_RP)
{
*typestring_offset = var->declspec.type->typestring_offset;
*flags |= IsSimpleRef;
@@ -1228,9 +1229,9 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
{
unsigned short offset = var->typestring_offset;
- if (!is_interpreted && is_array(var->declspec.type) &&
- type_array_is_decl_as_ptr(var->declspec.type) &&
- var->declspec.type->details.array.ptr_tfsoff)
+ if (!is_interpreted && is_array(var->declspec.type)
+ && type_array_is_decl_as_ptr(var->declspec.type)
+ && type_array_get_ptr_tfsoff(var->declspec.type))
offset = var->declspec.type->typestring_offset;
if (is_return)
@@ -3621,7 +3622,7 @@ static unsigned int write_type_tfs(FILE *file, const attr_list_t *attrs,
if (ptr_type != FC_RP) update_tfsoff( type, off, file );
*typeformat_offset += 4;
}
- type->details.array.ptr_tfsoff = off;
+ type_array_set_ptr_tfsoff(type, off);
}
return off;
}
@@ -4350,10 +4351,10 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const
((tc == FC_SMVARRAY || tc == FC_LGVARRAY) && in_attr) ||
(tc == FC_CARRAY && !in_attr))
{
- if (type_array_is_decl_as_ptr(type) && type->details.array.ptr_tfsoff)
+ if (type_array_is_decl_as_ptr(type) && type_array_get_ptr_tfsoff(type))
{
print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var,
- type->details.array.ptr_tfsoff);
+ type_array_get_ptr_tfsoff(type));
break;
}
print_phase_function(file, indent, array_type, local_var_prefix, phase, var, start_offset);
diff --git a/tools/widl/typetree.h b/tools/widl/typetree.h
index 4eb0a0a57f..07179a06b4 100644
--- a/tools/widl/typetree.h
+++ b/tools/widl/typetree.h
@@ -257,6 +257,20 @@ static inline expr_t *type_array_get_variance(const type_t *type)
return type->details.array.length_is;
}
+static inline unsigned short type_array_get_ptr_tfsoff(const type_t *type)
+{
+ type = type_get_real_type(type);
+ assert(type_get_type(type) == TYPE_ARRAY);
+ return type->details.array.ptr_tfsoff;
+}
+
+static inline void type_array_set_ptr_tfsoff(type_t *type, unsigned short ptr_tfsoff)
+{
+ type = type_get_real_type(type);
+ assert(type_get_type(type) == TYPE_ARRAY);
+ type->details.array.ptr_tfsoff = ptr_tfsoff;
+}
+
static inline const decl_spec_t *type_array_get_element(const type_t *type)
{
type = type_get_real_type(type);
--
2.22.0
More information about the wine-devel
mailing list