widl: Add a declonly argument to write_type_left.
This commit is contained in:
parent
4c8c425f42
commit
32a2477ef5
|
@ -109,7 +109,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
|
|||
}
|
||||
}
|
||||
|
||||
write_type_left(client, def->type);
|
||||
write_type_decl_left(client, def->type);
|
||||
if (needs_space_after(def->type))
|
||||
fprintf(client, " ");
|
||||
write_prefix_name(client, prefix_client, def);
|
||||
|
@ -130,7 +130,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
|
|||
if (!is_void(def->type))
|
||||
{
|
||||
print_client("");
|
||||
write_type_left(client, def->type);
|
||||
write_type_decl_left(client, def->type);
|
||||
fprintf(client, " _RetVal;\n");
|
||||
}
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ static void write_field(FILE *h, var_t *v)
|
|||
}
|
||||
}
|
||||
indent(h, 0);
|
||||
write_type(h, v->type, TRUE, "%s", name);
|
||||
write_type_def_or_decl(h, v->type, TRUE, "%s", name);
|
||||
fprintf(h, ";\n");
|
||||
}
|
||||
}
|
||||
|
@ -193,19 +193,19 @@ int needs_space_after(type_t *t)
|
|||
|| (!is_ptr(t) && (!is_conformant_array(t) || t->declarray)));
|
||||
}
|
||||
|
||||
void write_type_left(FILE *h, type_t *t)
|
||||
void write_type_left(FILE *h, type_t *t, int declonly)
|
||||
{
|
||||
if (t->is_const) fprintf(h, "const ");
|
||||
|
||||
if (t->kind == TKIND_ALIAS) fprintf(h, "%s", t->name);
|
||||
else if (t->declarray) write_type_left(h, t->ref);
|
||||
else if (t->declarray) write_type_left(h, t->ref, declonly);
|
||||
else {
|
||||
if (t->sign > 0) fprintf(h, "signed ");
|
||||
else if (t->sign < 0) fprintf(h, "unsigned ");
|
||||
switch (t->type) {
|
||||
case RPC_FC_ENUM16:
|
||||
case RPC_FC_ENUM32:
|
||||
if (t->defined && !t->written && !t->ignore) {
|
||||
if (!declonly && t->defined && !t->written && !t->ignore) {
|
||||
if (t->name) fprintf(h, "enum %s {\n", t->name);
|
||||
else fprintf(h, "enum {\n");
|
||||
t->written = TRUE;
|
||||
|
@ -223,7 +223,7 @@ void write_type_left(FILE *h, type_t *t)
|
|||
case RPC_FC_PSTRUCT:
|
||||
case RPC_FC_BOGUS_STRUCT:
|
||||
case RPC_FC_ENCAPSULATED_UNION:
|
||||
if (t->defined && !t->written && !t->ignore) {
|
||||
if (!declonly && t->defined && !t->written && !t->ignore) {
|
||||
if (t->name) fprintf(h, "struct %s {\n", t->name);
|
||||
else fprintf(h, "struct {\n");
|
||||
t->written = TRUE;
|
||||
|
@ -235,7 +235,7 @@ void write_type_left(FILE *h, type_t *t)
|
|||
else fprintf(h, "struct %s", t->name);
|
||||
break;
|
||||
case RPC_FC_NON_ENCAPSULATED_UNION:
|
||||
if (t->defined && !t->written && !t->ignore) {
|
||||
if (!declonly && t->defined && !t->written && !t->ignore) {
|
||||
if (t->name) fprintf(h, "union %s {\n", t->name);
|
||||
else fprintf(h, "union {\n");
|
||||
t->written = TRUE;
|
||||
|
@ -253,7 +253,7 @@ void write_type_left(FILE *h, type_t *t)
|
|||
case RPC_FC_CARRAY:
|
||||
case RPC_FC_CVARRAY:
|
||||
case RPC_FC_BOGUS_ARRAY:
|
||||
write_type_left(h, t->ref);
|
||||
write_type_left(h, t->ref, declonly);
|
||||
fprintf(h, "%s*", needs_space_after(t->ref) ? " " : "");
|
||||
break;
|
||||
default:
|
||||
|
@ -274,20 +274,39 @@ void write_type_right(FILE *h, type_t *t, int is_field)
|
|||
}
|
||||
}
|
||||
|
||||
void write_type(FILE *h, type_t *t, int is_field, const char *fmt, ...)
|
||||
void write_type_v(FILE *h, type_t *t, int is_field, int declonly,
|
||||
const char *fmt, va_list args)
|
||||
{
|
||||
write_type_left(h, t);
|
||||
write_type_left(h, t, declonly);
|
||||
if (fmt) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
if (needs_space_after(t))
|
||||
fprintf(h, " ");
|
||||
vfprintf(h, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
write_type_right(h, t, is_field);
|
||||
}
|
||||
|
||||
void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
write_type_v(f, t, field, FALSE, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void write_type_decl(FILE *f, type_t *t, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
write_type_v(f, t, FALSE, TRUE, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void write_type_decl_left(FILE *f, type_t *t)
|
||||
{
|
||||
write_type_left(f, t, TRUE);
|
||||
}
|
||||
|
||||
static int user_type_registered(const char *name)
|
||||
{
|
||||
user_type_t *ut;
|
||||
|
@ -373,7 +392,7 @@ void write_context_handle_rundowns(void)
|
|||
void write_typedef(type_t *type)
|
||||
{
|
||||
fprintf(header, "typedef ");
|
||||
write_type(header, type->orig, FALSE, "%s", type->name);
|
||||
write_type_def_or_decl(header, type->orig, FALSE, "%s", type->name);
|
||||
fprintf(header, ";\n");
|
||||
}
|
||||
|
||||
|
@ -414,13 +433,13 @@ void write_expr(FILE *h, const expr_t *e, int brackets)
|
|||
break;
|
||||
case EXPR_CAST:
|
||||
fprintf(h, "(");
|
||||
write_type(h, e->u.tref, FALSE, NULL);
|
||||
write_type_decl(h, e->u.tref, NULL);
|
||||
fprintf(h, ")");
|
||||
write_expr(h, e->ref, 1);
|
||||
break;
|
||||
case EXPR_SIZEOF:
|
||||
fprintf(h, "sizeof(");
|
||||
write_type(h, e->u.tref, FALSE, NULL);
|
||||
write_type_decl(h, e->u.tref, NULL);
|
||||
fprintf(h, ")");
|
||||
break;
|
||||
case EXPR_SHL:
|
||||
|
@ -469,7 +488,7 @@ void write_constdef(const var_t *v)
|
|||
void write_externdef(const var_t *v)
|
||||
{
|
||||
fprintf(header, "extern const ");
|
||||
write_type(header, v->type, FALSE, "%s", v->name);
|
||||
write_type_def_or_decl(header, v->type, FALSE, "%s", v->name);
|
||||
fprintf(header, ";\n\n");
|
||||
}
|
||||
|
||||
|
@ -595,7 +614,7 @@ void write_args(FILE *h, const var_list_t *args, const char *name, int method, i
|
|||
}
|
||||
if (arg->args)
|
||||
{
|
||||
write_type_left(h, arg->type);
|
||||
write_type_decl_left(h, arg->type);
|
||||
fprintf(h, " (STDMETHODCALLTYPE *");
|
||||
write_name(h,arg);
|
||||
fprintf(h, ")(");
|
||||
|
@ -603,7 +622,7 @@ void write_args(FILE *h, const var_list_t *args, const char *name, int method, i
|
|||
fprintf(h, ")");
|
||||
}
|
||||
else
|
||||
write_type(h, arg->type, FALSE, "%s", arg->name);
|
||||
write_type_decl(h, arg->type, "%s", arg->name);
|
||||
count++;
|
||||
}
|
||||
if (do_indent) indentation--;
|
||||
|
@ -621,7 +640,7 @@ static void write_cpp_method_def(const type_t *iface)
|
|||
if (!is_callas(def->attrs)) {
|
||||
indent(header, 0);
|
||||
fprintf(header, "virtual ");
|
||||
write_type_left(header, def->type);
|
||||
write_type_decl_left(header, def->type);
|
||||
fprintf(header, " STDMETHODCALLTYPE ");
|
||||
write_name(header, def);
|
||||
fprintf(header, "(\n");
|
||||
|
@ -646,7 +665,7 @@ static void do_write_c_method_def(const type_t *iface, const char *name)
|
|||
const var_t *def = cur->def;
|
||||
if (!is_callas(def->attrs)) {
|
||||
indent(header, 0);
|
||||
write_type_left(header, def->type);
|
||||
write_type_decl_left(header, def->type);
|
||||
fprintf(header, " (STDMETHODCALLTYPE *");
|
||||
write_name(header, def);
|
||||
fprintf(header, ")(\n");
|
||||
|
@ -679,7 +698,7 @@ static void write_method_proto(const type_t *iface)
|
|||
|
||||
if (!is_local(def->attrs)) {
|
||||
/* proxy prototype */
|
||||
write_type_left(header, def->type);
|
||||
write_type_decl_left(header, def->type);
|
||||
fprintf(header, " CALLBACK %s_", iface->name);
|
||||
write_name(header, def);
|
||||
fprintf(header, "_Proxy(\n");
|
||||
|
@ -701,14 +720,14 @@ static void write_method_proto(const type_t *iface)
|
|||
if (&m->entry != iface->funcs) {
|
||||
const var_t *mdef = m->def;
|
||||
/* proxy prototype - use local prototype */
|
||||
write_type_left(header, mdef->type);
|
||||
write_type_decl_left(header, mdef->type);
|
||||
fprintf(header, " CALLBACK %s_", iface->name);
|
||||
write_name(header, mdef);
|
||||
fprintf(header, "_Proxy(\n");
|
||||
write_args(header, m->args, iface->name, 1, TRUE);
|
||||
fprintf(header, ");\n");
|
||||
/* stub prototype - use remotable prototype */
|
||||
write_type_left(header, def->type);
|
||||
write_type_decl_left(header, def->type);
|
||||
fprintf(header, " __RPC_STUB %s_", iface->name);
|
||||
write_name(header, mdef);
|
||||
fprintf(header, "_Stub(\n");
|
||||
|
@ -727,7 +746,7 @@ static void write_function_proto(const type_t *iface, const func_t *fun, const c
|
|||
var_t *def = fun->def;
|
||||
|
||||
/* FIXME: do we need to handle call_as? */
|
||||
write_type_left(header, def->type);
|
||||
write_type_decl_left(header, def->type);
|
||||
fprintf(header, " ");
|
||||
write_prefix_name(header, prefix, def);
|
||||
fprintf(header, "(\n");
|
||||
|
|
|
@ -32,9 +32,11 @@ extern int is_conformant_array(const type_t *t);
|
|||
extern void write_name(FILE *h, const var_t *v);
|
||||
extern void write_prefix_name(FILE *h, const char *prefix, const var_t *v);
|
||||
extern const char* get_name(const var_t *v);
|
||||
extern void write_type_left(FILE *h, type_t *t);
|
||||
extern void write_type_left(FILE *h, type_t *t, int declonly);
|
||||
extern void write_type_right(FILE *h, type_t *t, int is_field);
|
||||
extern void write_type(FILE *h, type_t *t, int is_field, const char *fmt, ...);
|
||||
extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char *fmt, ...);
|
||||
extern void write_type_decl(FILE *f, type_t *t, const char *fmt, ...);
|
||||
extern void write_type_decl_left(FILE *f, type_t *t);
|
||||
extern int needs_space_after(type_t *t);
|
||||
extern int is_object(const attr_list_t *list);
|
||||
extern int is_local(const attr_list_t *list);
|
||||
|
|
|
@ -325,20 +325,20 @@ statement: ';' {}
|
|||
| constdef ';' { if (!parse_only && do_header) { write_constdef($1); } }
|
||||
| cppquote {}
|
||||
| enumdef ';' { if (!parse_only && do_header) {
|
||||
write_type(header, $1, FALSE, NULL);
|
||||
write_type_def_or_decl(header, $1, FALSE, NULL);
|
||||
fprintf(header, ";\n\n");
|
||||
}
|
||||
}
|
||||
| externdef ';' { if (!parse_only && do_header) { write_externdef($1); } }
|
||||
| import {}
|
||||
| structdef ';' { if (!parse_only && do_header) {
|
||||
write_type(header, $1, FALSE, NULL);
|
||||
write_type_def_or_decl(header, $1, FALSE, NULL);
|
||||
fprintf(header, ";\n\n");
|
||||
}
|
||||
}
|
||||
| typedef ';' {}
|
||||
| uniondef ';' { if (!parse_only && do_header) {
|
||||
write_type(header, $1, FALSE, NULL);
|
||||
write_type_def_or_decl(header, $1, FALSE, NULL);
|
||||
fprintf(header, ";\n\n");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -255,7 +255,7 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
|
|||
int has_ret = !is_void(def->type);
|
||||
|
||||
indent = 0;
|
||||
write_type_left(proxy, def->type);
|
||||
write_type_decl_left(proxy, def->type);
|
||||
print_proxy( " STDMETHODCALLTYPE %s_", iface->name);
|
||||
write_name(proxy, def);
|
||||
print_proxy( "_Proxy(\n");
|
||||
|
@ -266,7 +266,7 @@ static void gen_proxy(type_t *iface, const func_t *cur, int idx,
|
|||
/* local variables */
|
||||
if (has_ret) {
|
||||
print_proxy( "" );
|
||||
write_type_left(proxy, def->type);
|
||||
write_type_decl_left(proxy, def->type);
|
||||
print_proxy( " _RetVal;\n");
|
||||
}
|
||||
print_proxy( "RPC_MESSAGE _RpcMessage;\n" );
|
||||
|
|
|
@ -187,7 +187,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset)
|
|||
if (is_context_handle(var->type))
|
||||
{
|
||||
print_server("(");
|
||||
write_type_left(server, var->type);
|
||||
write_type_decl_left(server, var->type);
|
||||
fprintf(server, ")%sNDRSContextValue(%s)", is_ptr(var->type) ? "" : "*", var->name);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -2548,7 +2548,7 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
|
|||
if (phase == PHASE_MARSHAL)
|
||||
{
|
||||
print_file(file, indent, "*(");
|
||||
write_type(file, is_ptr(type) ? type->ref : type, FALSE, NULL);
|
||||
write_type_decl(file, is_ptr(type) ? type->ref : type, NULL);
|
||||
if (is_ptr(type))
|
||||
fprintf(file, " *)_StubMsg.Buffer = *");
|
||||
else
|
||||
|
@ -2567,12 +2567,12 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
|
|||
fprintf(file, " = (");
|
||||
else
|
||||
fprintf(file, " = *(");
|
||||
write_type(file, is_ptr(type) ? type->ref : type, FALSE, NULL);
|
||||
write_type_decl(file, is_ptr(type) ? type->ref : type, NULL);
|
||||
fprintf(file, " *)_StubMsg.Buffer;\n");
|
||||
}
|
||||
|
||||
print_file(file, indent, "_StubMsg.Buffer += sizeof(");
|
||||
write_type(file, var->type, FALSE, NULL);
|
||||
write_type_decl(file, var->type, NULL);
|
||||
fprintf(file, ");\n");
|
||||
}
|
||||
|
||||
|
@ -2930,13 +2930,13 @@ static void write_struct_expr(FILE *h, const expr_t *e, int brackets,
|
|||
break;
|
||||
case EXPR_CAST:
|
||||
fprintf(h, "(");
|
||||
write_type(h, e->u.tref, FALSE, NULL);
|
||||
write_type_decl(h, e->u.tref, NULL);
|
||||
fprintf(h, ")");
|
||||
write_struct_expr(h, e->ref, 1, fields, structvar);
|
||||
break;
|
||||
case EXPR_SIZEOF:
|
||||
fprintf(h, "sizeof(");
|
||||
write_type(h, e->u.tref, FALSE, NULL);
|
||||
write_type_decl(h, e->u.tref, NULL);
|
||||
fprintf(h, ")");
|
||||
break;
|
||||
case EXPR_SHL:
|
||||
|
@ -2987,7 +2987,7 @@ void declare_stub_args( FILE *file, int indent, const func_t *func )
|
|||
if (!is_void(def->type))
|
||||
{
|
||||
print_file(file, indent, "");
|
||||
write_type_left(file, def->type);
|
||||
write_type_decl_left(file, def->type);
|
||||
fprintf(file, " _RetVal;\n");
|
||||
}
|
||||
|
||||
|
@ -3010,12 +3010,12 @@ void declare_stub_args( FILE *file, int indent, const func_t *func )
|
|||
if (!in_attr && !var->type->size_is && !is_string)
|
||||
{
|
||||
print_file(file, indent, "");
|
||||
write_type(file, var->type->ref, FALSE, "_W%u", i++);
|
||||
write_type_decl(file, var->type->ref, "_W%u", i++);
|
||||
fprintf(file, ";\n");
|
||||
}
|
||||
|
||||
print_file(file, indent, "");
|
||||
write_type_left(file, var->type);
|
||||
write_type_decl_left(file, var->type);
|
||||
fprintf(file, " ");
|
||||
if (var->type->declarray) {
|
||||
fprintf(file, "( *");
|
||||
|
|
Loading…
Reference in New Issue