Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 4602 of file typegen.c.
Referenced by gen_stub(), and write_function_stub().
{ int in_attr, out_attr; int i = 0, sep = 0; const var_t *var; if (!type_get_function_args(func->type)) return; LIST_FOR_EACH_ENTRY( var, type_get_function_args(func->type), const var_t, entry ) { in_attr = is_attr(var->attrs, ATTR_IN); out_attr = is_attr(var->attrs, ATTR_OUT); if (!out_attr && !in_attr) in_attr = 1; if (!in_attr) { print_file(file, indent, "%s%s", local_var_prefix, var->name); switch (typegen_detect_type(var->type, var->attrs, TDT_IGNORE_STRINGS)) { case TGT_CTXT_HANDLE_POINTER: fprintf(file, " = NdrContextHandleInitialize(\n"); print_file(file, indent + 1, "&__frame->_StubMsg,\n"); print_file(file, indent + 1, "(PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%d]);\n", var->type->typestring_offset); break; case TGT_ARRAY: if (type_array_has_conformance(var->type)) { unsigned int size; type_t *type; fprintf(file, " = NdrAllocate(&__frame->_StubMsg, "); for (type = var->type; 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); fprintf(file, "%u);\n", size); print_file(file, indent, "memset(%s%s, 0, ", local_var_prefix, var->name); for (type = var->type; 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); fprintf(file, "%u);\n", size); } else fprintf(file, " = &%s_W%u;\n", local_var_prefix, i++); break; case TGT_POINTER: 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)) { case TGT_BASIC: case TGT_ENUM: case TGT_POINTER: case TGT_RANGE: case TGT_IFACE_POINTER: print_file(file, indent, "%s_W%u = 0;\n", local_var_prefix, i); break; case TGT_USER_TYPE: print_file(file, indent, "memset(&%s_W%u, 0, sizeof(%s_W%u));\n", local_var_prefix, i, local_var_prefix, i); break; case TGT_STRUCT: case TGT_UNION: case TGT_ARRAY: case TGT_CTXT_HANDLE: case TGT_CTXT_HANDLE_POINTER: case TGT_INVALID: case TGT_STRING: /* not initialised */ break; } i++; break; default: break; } sep = 1; } } if (sep) fprintf(file, "\n"); }