widl: Write type string for serialized types.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2018-11-09 13:51:10 +01:00 committed by Alexandre Julliard
parent 90748c581b
commit ed11765665
1 changed files with 42 additions and 13 deletions

View File

@ -3680,13 +3680,23 @@ static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *ty
static void process_tfs_iface(type_t *iface, FILE *file, int indent, unsigned int *offset) static void process_tfs_iface(type_t *iface, FILE *file, int indent, unsigned int *offset)
{ {
const statement_t *stmt_func; const statement_list_t *stmts = type_iface_get_stmts(iface);
const statement_t *stmt;
var_t *var; var_t *var;
current_iface = iface; current_iface = iface;
STATEMENTS_FOR_EACH_FUNC( stmt_func, type_iface_get_stmts(iface) ) if (stmts) LIST_FOR_EACH_ENTRY( stmt, stmts, statement_t, entry )
{ {
const var_t *func = stmt_func->u.var; switch(stmt->type)
{
case STMT_DECLARATION:
{
const var_t *func = stmt->u.var;
if(stmt->u.var->stgclass != STG_NONE
|| type_get_type_detect_alias(stmt->u.var->type) != TYPE_FUNCTION)
continue;
current_func = func; current_func = func;
if (is_local(func->attrs)) continue; if (is_local(func->attrs)) continue;
@ -3699,6 +3709,25 @@ static void process_tfs_iface(type_t *iface, FILE *file, int indent, unsigned in
LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), var_t, entry ) LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), var_t, entry )
var->typestring_offset = write_type_tfs( file, 2, var->attrs, var->type, var->name, var->typestring_offset = write_type_tfs( file, 2, var->attrs, var->type, var->name,
TYPE_CONTEXT_TOPLEVELPARAM, offset ); TYPE_CONTEXT_TOPLEVELPARAM, offset );
break;
}
case STMT_TYPEDEF:
{
const type_list_t *type_entry;
for (type_entry = stmt->u.type_list; type_entry; type_entry = type_entry->next)
{
if (is_attr(type_entry->type->attrs, ATTR_ENCODE)
|| is_attr(type_entry->type->attrs, ATTR_DECODE))
type_entry->type->typestring_offset = write_type_tfs( file, 2,
type_entry->type->attrs, type_entry->type, type_entry->type->name,
TYPE_CONTEXT_CONTAINER, offset);
}
break;
}
default:
break;
}
} }
} }