Commit 8a976a7d authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

widl: Replace uses of get_func_return_type with type_function_get_rettype.

Also replace direct accesses into the type structure to get the return type of a function with the same function.
parent 9b139018
......@@ -113,7 +113,8 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client("RPC_BINDING_HANDLE _Handle;\n");
}
if (!is_void(get_func_return_type(func)) && decl_indirect(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)) &&
decl_indirect(type_function_get_rettype(func->type)))
{
print_client("void *_p_%s;\n", "_RetVal" );
}
......@@ -144,8 +145,8 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
indent--;
print_client( "}\n\n" );
write_type_decl_left(client, get_func_return_type(func));
if (needs_space_after(get_func_return_type(func)))
write_type_decl_left(client, type_function_get_rettype(func->type));
if (needs_space_after(type_function_get_rettype(func->type)))
fprintf(client, " ");
if (callconv) fprintf(client, "%s ", callconv);
fprintf(client, "%s%s(\n", prefix_client, get_name(func));
......@@ -163,10 +164,10 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client( "struct __frame_%s%s __f, * const __frame = &__f;\n", prefix_client, get_name(func) );
/* declare return value '_RetVal' */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
{
print_client("");
write_type_decl_left(client, get_func_return_type(func));
write_type_decl_left(client, type_function_get_rettype(func->type));
fprintf(client, " _RetVal;\n");
}
print_client("RPC_MESSAGE _RpcMessage;\n");
......@@ -178,7 +179,8 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
print_client("__frame->%s = %s;\n",
explicit_generic_handle_var->name, explicit_generic_handle_var->name );
}
if (!is_void(get_func_return_type(func)) && decl_indirect(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)) &&
decl_indirect(type_function_get_rettype(func->type)))
{
print_client("__frame->_p_%s = &%s;\n",
"_RetVal", "_RetVal");
......@@ -285,11 +287,12 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
write_remoting_arguments(client, indent, func, "", PASS_OUT, PHASE_UNMARSHAL);
/* unmarshal return value */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
{
if (decl_indirect(get_func_return_type(func)))
if (decl_indirect(type_function_get_rettype(func->type)))
print_client("MIDL_memset(&%s, 0, sizeof(%s));\n", "_RetVal", "_RetVal");
else if (is_ptr(get_func_return_type(func)) || is_array(get_func_return_type(func)))
else if (is_ptr(type_function_get_rettype(func->type)) ||
is_array(type_function_get_rettype(func->type)))
print_client("%s = 0;\n", "_RetVal");
write_remoting_arguments(client, indent, func, "", PASS_RETURN, PHASE_UNMARSHAL);
}
......@@ -300,8 +303,8 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
LIST_FOR_EACH_ENTRY( var, args, const var_t, entry )
*proc_offset += get_size_procformatstring_type(var->name, var->type, var->attrs);
}
if (!is_void(get_func_return_type(func)))
*proc_offset += get_size_procformatstring_type("return value", get_func_return_type(func), NULL);
if (!is_void(type_function_get_rettype(func->type)))
*proc_offset += get_size_procformatstring_type("return value", type_function_get_rettype(func->type), NULL);
else
*proc_offset += 2; /* FC_END and FC_PAD */
......@@ -317,7 +320,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
/* emit return code */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
{
fprintf(client, "\n");
print_client("return _RetVal;\n");
......
......@@ -299,7 +299,7 @@ void write_type_v(FILE *h, type_t *t, int is_field, int declonly,
const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV);
if (!callconv) callconv = "";
if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, "inline ");
write_type_left(h, pt->ref, declonly);
write_type_left(h, type_function_get_rettype(pt), declonly);
fputc(' ', h);
if (ptr_level) fputc('(', h);
fprintf(h, "%s ", callconv);
......@@ -589,7 +589,7 @@ int has_out_arg_or_return(const var_t *func)
{
const var_t *var;
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
return 1;
if (!type_get_function_args(func->type))
......@@ -700,7 +700,7 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
if (!callconv) callconv = "";
indent(header, 0);
fprintf(header, "virtual ");
write_type_decl_left(header, get_func_return_type(func));
write_type_decl_left(header, type_function_get_rettype(func->type));
fprintf(header, " %s %s(\n", callconv, get_name(func));
write_args(header, type_get_function_args(func->type), iface->name, 2, TRUE);
fprintf(header, ") = 0;\n");
......@@ -729,7 +729,7 @@ static void do_write_c_method_def(FILE *header, const type_t *iface, const char
const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);
if (!callconv) callconv = "";
indent(header, 0);
write_type_decl_left(header, get_func_return_type(func));
write_type_decl_left(header, type_function_get_rettype(func->type));
fprintf(header, " (%s *%s)(\n", callconv, get_name(func));
write_args(header, type_get_function_args(func->type), name, 1, TRUE);
fprintf(header, ");\n");
......@@ -760,7 +760,7 @@ static void write_method_proto(FILE *header, const type_t *iface)
const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);
if (!callconv) callconv = "";
/* proxy prototype */
write_type_decl_left(header, get_func_return_type(func));
write_type_decl_left(header, type_function_get_rettype(func->type));
fprintf(header, " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
write_args(header, type_get_function_args(func->type), iface->name, 1, TRUE);
fprintf(header, ");\n");
......@@ -795,12 +795,12 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
if (&stmt2->entry != type_iface_get_stmts(iface)) {
const var_t *m = stmt2->u.var;
/* proxy prototype - use local prototype */
write_type_decl_left(fp, get_func_return_type(m));
write_type_decl_left(fp, type_function_get_rettype(m->type));
fprintf(fp, " CALLBACK %s_%s_Proxy(\n", iface->name, get_name(m));
write_args(fp, type_get_function_args(m->type), iface->name, 1, TRUE);
fprintf(fp, ")");
if (body) {
type_t *rt = get_func_return_type(m);
type_t *rt = type_function_get_rettype(m->type);
fprintf(fp, "\n{\n");
fprintf(fp, " %s\n", comment);
if (rt->name && strcmp(rt->name, "HRESULT") == 0)
......@@ -817,7 +817,7 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
else
fprintf(fp, ";\n");
/* stub prototype - use remotable prototype */
write_type_decl_left(fp, get_func_return_type(func));
write_type_decl_left(fp, type_function_get_rettype(func->type));
fprintf(fp, " __RPC_STUB %s_%s_Stub(\n", iface->name, get_name(m));
write_args(fp, type_get_function_args(func->type), iface->name, 1, TRUE);
fprintf(fp, ")");
......@@ -870,7 +870,7 @@ static void write_function_proto(FILE *header, const type_t *iface, const var_t
const char *callconv = get_attrp(fun->type->attrs, ATTR_CALLCONV);
/* FIXME: do we need to handle call_as? */
write_type_decl_left(header, fun->type->ref);
write_type_decl_left(header, type_function_get_rettype(fun->type));
fprintf(header, " ");
if (callconv) fprintf(header, "%s ", callconv);
fprintf(header, "%s%s(\n", prefix, get_name(fun));
......
......@@ -300,7 +300,7 @@ static void proxy_free_variables( var_list_t *args, const char *local_var_prefix
static void gen_proxy(type_t *iface, const var_t *func, int idx,
unsigned int proc_offset)
{
int has_ret = !is_void(get_func_return_type(func));
int has_ret = !is_void(type_function_get_rettype(func->type));
int has_full_pointer = is_full_pointer_function(func);
const char *callconv = get_attrp(func->type->attrs, ATTR_CALLCONV);
if (!callconv) callconv = "";
......@@ -316,7 +316,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
print_proxy( "}\n");
print_proxy( "\n");
write_type_decl_left(proxy, get_func_return_type(func));
write_type_decl_left(proxy, type_function_get_rettype(func->type));
print_proxy( " %s %s_%s_Proxy(\n", callconv, iface->name, get_name(func));
write_args(proxy, type_get_function_args(func->type), iface->name, 1, TRUE);
print_proxy( ")\n");
......@@ -326,12 +326,12 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
/* local variables */
if (has_ret) {
print_proxy( "" );
write_type_decl_left(proxy, get_func_return_type(func));
write_type_decl_left(proxy, type_function_get_rettype(func->type));
print_proxy( " _RetVal;\n");
}
print_proxy( "RPC_MESSAGE _RpcMessage;\n" );
if (has_ret) {
if (decl_indirect(get_func_return_type(func)))
if (decl_indirect(type_function_get_rettype(func->type)))
print_proxy("void *_p_%s = &%s;\n",
"_RetVal", "_RetVal");
}
......@@ -377,9 +377,10 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
if (has_ret)
{
if (decl_indirect(get_func_return_type(func)))
if (decl_indirect(type_function_get_rettype(func->type)))
print_proxy("MIDL_memset(&%s, 0, sizeof(%s));\n", "_RetVal", "_RetVal");
else if (is_ptr(get_func_return_type(func)) || is_array(get_func_return_type(func)))
else if (is_ptr(type_function_get_rettype(func->type)) ||
is_array(type_function_get_rettype(func->type)))
print_proxy("%s = 0;\n", "_RetVal");
write_remoting_arguments(proxy, indent, func, "", PASS_RETURN, PHASE_UNMARSHAL);
}
......@@ -418,7 +419,7 @@ static void gen_stub(type_t *iface, const var_t *func, const char *cas,
unsigned int proc_offset)
{
const var_t *arg;
int has_ret = !is_void(get_func_return_type(func));
int has_ret = !is_void(type_function_get_rettype(func->type));
int has_full_pointer = is_full_pointer_function(func);
indent = 0;
......@@ -498,7 +499,7 @@ static void gen_stub(type_t *iface, const var_t *func, const char *cas,
write_remoting_arguments(proxy, indent, func, "__frame->", PASS_OUT, PHASE_BUFFERSIZE);
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
write_remoting_arguments(proxy, indent, func, "__frame->", PASS_RETURN, PHASE_BUFFERSIZE);
print_proxy("NdrStubGetBuffer(This, _pRpcChannelBuffer, &__frame->_StubMsg);\n");
......@@ -507,7 +508,7 @@ static void gen_stub(type_t *iface, const var_t *func, const char *cas,
fprintf(proxy, "\n");
/* marshall the return value */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
write_remoting_arguments(proxy, indent, func, "__frame->", PASS_RETURN, PHASE_MARSHAL);
indent--;
......
......@@ -155,7 +155,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
assign_stub_out_args(server, indent, func, "__frame->");
/* Call the real server function */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
print_server("__frame->_RetVal = ");
else
print_server("");
......@@ -201,7 +201,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
{
write_remoting_arguments(server, indent, func, "__frame->", PASS_OUT, PHASE_BUFFERSIZE);
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
write_remoting_arguments(server, indent, func, "__frame->", PASS_RETURN, PHASE_BUFFERSIZE);
print_server("_pRpcMessage->BufferLength = __frame->_StubMsg.BufferLength;\n");
......@@ -220,7 +220,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
write_remoting_arguments(server, indent, func, "__frame->", PASS_OUT, PHASE_MARSHAL);
/* marshall the return value */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
write_remoting_arguments(server, indent, func, "__frame->", PASS_RETURN, PHASE_MARSHAL);
indent--;
......
......@@ -541,8 +541,8 @@ void write_parameters_init(FILE *file, int indent, const var_t *func, const char
{
const var_t *var;
if (!is_void(get_func_return_type(func)))
write_var_init(file, indent, get_func_return_type(func), "_RetVal", local_var_prefix);
if (!is_void(type_function_get_rettype(func->type)))
write_var_init(file, indent, type_function_get_rettype(func->type), "_RetVal", local_var_prefix);
if (!type_get_function_args(func->type))
return;
......@@ -695,13 +695,13 @@ static void write_procformatstring_stmts(FILE *file, int indent, const statement
}
/* emit return value data */
if (is_void(get_func_return_type(func)))
if (is_void(type_function_get_rettype(func->type)))
{
print_file(file, indent, "0x5b, /* FC_END */\n");
print_file(file, indent, "0x5c, /* FC_PAD */\n");
}
else
write_procformatstring_type(file, indent, "return value", get_func_return_type(func), NULL, TRUE);
write_procformatstring_type(file, indent, "return value", type_function_get_rettype(func->type), NULL, TRUE);
}
}
else if (stmt->type == STMT_LIBRARY)
......@@ -1080,7 +1080,7 @@ size_t type_memsize(const type_t *t, unsigned int *align)
int is_full_pointer_function(const var_t *func)
{
const var_t *var;
if (type_has_full_pointer(get_func_return_type(func)))
if (type_has_full_pointer(type_function_get_rettype(func->type)))
return TRUE;
if (!type_get_function_args(func->type))
return FALSE;
......@@ -2604,13 +2604,14 @@ static size_t process_tfs_stmts(FILE *file, const statement_list_t *stmts,
const var_t *func = stmt_func->u.var;
if (is_local(func->attrs)) continue;
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
{
var_t v = *func;
v.type = get_func_return_type(func);
update_tfsoff(get_func_return_type(func),
v.type = type_function_get_rettype(func->type);
update_tfsoff(type_function_get_rettype(func->type),
write_typeformatstring_var(
file, 2, NULL, get_func_return_type(func),
file, 2, NULL,
type_function_get_rettype(func->type),
&v, typeformat_offset),
file);
}
......@@ -2768,10 +2769,10 @@ static unsigned int get_function_buffer_size( const var_t *func, enum pass pass
}
}
if (pass == PASS_OUT && !is_void(get_func_return_type(func)))
if (pass == PASS_OUT && !is_void(type_function_get_rettype(func->type)))
{
var_t v = *func;
v.type = get_func_return_type(func);
v.type = type_function_get_rettype(func->type);
total_size += get_required_buffer_size(&v, &alignment, PASS_RETURN);
total_size += alignment;
}
......@@ -3208,7 +3209,7 @@ void write_remoting_arguments(FILE *file, int indent, const var_t *func, const c
{
var_t var;
var = *func;
var.type = get_func_return_type(func);
var.type = type_function_get_rettype(func->type);
var.name = xstrdup( "_RetVal" );
write_remoting_arg( file, indent, func, local_var_prefix, pass, phase, &var );
free( var.name );
......@@ -3241,10 +3242,10 @@ size_t get_size_procformatstring_func(const var_t *func)
size += get_size_procformatstring_type(var->name, var->type, var->attrs);
/* return value size */
if (is_void(get_func_return_type(func)))
if (is_void(type_function_get_rettype(func->type)))
size += 2; /* FC_END and FC_PAD */
else
size += get_size_procformatstring_type("return value", get_func_return_type(func), NULL);
size += get_size_procformatstring_type("return value", type_function_get_rettype(func->type), NULL);
return size;
}
......@@ -3294,10 +3295,10 @@ void declare_stub_args( FILE *file, int indent, const var_t *func )
const var_t *var;
/* declare return value '_RetVal' */
if (!is_void(get_func_return_type(func)))
if (!is_void(type_function_get_rettype(func->type)))
{
print_file(file, indent, "");
write_type_decl_left(file, get_func_return_type(func));
write_type_decl_left(file, type_function_get_rettype(func->type));
fprintf(file, " _RetVal;\n");
}
......
......@@ -49,6 +49,12 @@ static inline var_list_t *type_function_get_args(const type_t *type)
return type->details.function->args;
}
static inline type_t *type_function_get_rettype(const type_t *type)
{
assert(type->type == RPC_FC_FUNCTION);
return type->ref;
}
static inline var_list_t *type_enum_get_values(const type_t *type)
{
assert(type->type == RPC_FC_ENUM16 || type->type == RPC_FC_ENUM32);
......
......@@ -455,11 +455,6 @@ type_t *make_type(unsigned char type, type_t *ref);
void init_loc_info(loc_info_t *);
static inline type_t *get_func_return_type(const var_t *func)
{
return func->type->ref;
}
static inline var_list_t *type_get_function_args(const type_t *func_type)
{
return func_type->details.function->args;
......
......@@ -1438,7 +1438,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
/* fill out the basic type information */
typedata[0] = typedata_size | (index << 16);
encode_var(typeinfo->typelib, get_func_return_type(func), func, &typedata[1], NULL, NULL, &decoded_size);
encode_var(typeinfo->typelib, type_function_get_rettype(func->type), func, &typedata[1], NULL, NULL, &decoded_size);
typedata[2] = funcflags;
typedata[3] = ((52 /*sizeof(FUNCDESC)*/ + decoded_size) << 16) | typeinfo->typeinfo->cbSizeVft;
typedata[4] = (next_idx << 16) | (callconv << 8) | (invokekind << 3) | funckind;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment