widl: Convert assign_stub_out_args to using typegen_detect_type and fix the non-conformant array case.
This commit is contained in:
parent
f6b53be0d9
commit
0ec617e01d
|
@ -3900,33 +3900,36 @@ void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char
|
||||||
{
|
{
|
||||||
print_file(file, indent, "%s%s", local_var_prefix, var->name);
|
print_file(file, indent, "%s%s", local_var_prefix, var->name);
|
||||||
|
|
||||||
if (is_context_handle(var->type))
|
switch (typegen_detect_type(var->type, var->attrs, TDT_IGNORE_STRINGS))
|
||||||
{
|
{
|
||||||
|
case TGT_CTXT_HANDLE_POINTER:
|
||||||
fprintf(file, " = NdrContextHandleInitialize(\n");
|
fprintf(file, " = NdrContextHandleInitialize(\n");
|
||||||
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
|
print_file(file, indent + 1, "&__frame->_StubMsg,\n");
|
||||||
print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n",
|
print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n",
|
||||||
var->type->typestring_offset);
|
var->type->typestring_offset);
|
||||||
}
|
break;
|
||||||
else if (is_array(var->type) &&
|
case TGT_ARRAY:
|
||||||
type_array_has_conformance(var->type))
|
if (type_array_has_conformance(var->type))
|
||||||
{
|
|
||||||
unsigned int size, align = 0;
|
|
||||||
type_t *type = var->type;
|
|
||||||
|
|
||||||
fprintf(file, " = NdrAllocate(&__frame->_StubMsg, ");
|
|
||||||
for ( ;
|
|
||||||
is_array(type) && type_array_has_conformance(type);
|
|
||||||
type = type_array_get_element(type))
|
|
||||||
{
|
{
|
||||||
write_expr(file, type_array_get_conformance(type), TRUE,
|
unsigned int size, align = 0;
|
||||||
TRUE, NULL, NULL, local_var_prefix);
|
type_t *type = var->type;
|
||||||
fprintf(file, " * ");
|
|
||||||
|
fprintf(file, " = NdrAllocate(&__frame->_StubMsg, ");
|
||||||
|
for ( ;
|
||||||
|
is_array(type) && type_array_has_conformance(type);
|
||||||
|
type = type_array_get_element(type))
|
||||||
|
{
|
||||||
|
write_expr(file, type_array_get_conformance(type), TRUE,
|
||||||
|
TRUE, NULL, NULL, local_var_prefix);
|
||||||
|
fprintf(file, " * ");
|
||||||
|
}
|
||||||
|
size = type_memsize(type, &align);
|
||||||
|
fprintf(file, "%u);\n", size);
|
||||||
}
|
}
|
||||||
size = type_memsize(type, &align);
|
else
|
||||||
fprintf(file, "%u);\n", size);
|
fprintf(file, " = &%s_W%u;\n", local_var_prefix, i++);
|
||||||
}
|
break;
|
||||||
else
|
case TGT_POINTER:
|
||||||
{
|
|
||||||
fprintf(file, " = &%s_W%u;\n", local_var_prefix, i);
|
fprintf(file, " = &%s_W%u;\n", local_var_prefix, i);
|
||||||
switch (typegen_detect_type(type_pointer_get_ref(var->type), var->attrs, TDT_IGNORE_STRINGS))
|
switch (typegen_detect_type(type_pointer_get_ref(var->type), var->attrs, TDT_IGNORE_STRINGS))
|
||||||
{
|
{
|
||||||
|
@ -3949,6 +3952,9 @@ void assign_stub_out_args( FILE *file, int indent, const var_t *func, const char
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sep = 1;
|
sep = 1;
|
||||||
|
|
Loading…
Reference in New Issue