Alexandre Julliard : widl: Move support for stub arguments to typegen. c to make it usable for proxies too.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 25 06:12:07 CST 2007


Module: wine
Branch: master
Commit: 85ed9ca31a3383d195b4712951f2e61930588b1b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=85ed9ca31a3383d195b4712951f2e61930588b1b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jan 24 19:59:16 2007 +0100

widl: Move support for stub arguments to typegen.c to make it usable for proxies too.

---

 tools/widl/server.c  |  105 +-------------------------------------------------
 tools/widl/typegen.c |  102 ++++++++++++++++++++++++++++++++++++++++++++++++
 tools/widl/typegen.h |    2 +
 3 files changed, 106 insertions(+), 103 deletions(-)

diff --git a/tools/widl/server.c b/tools/widl/server.c
index c7613d4..3719aae 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -76,99 +76,6 @@ static void write_parameters_init(const
 }
 
 
-static void declare_args(const func_t *func)
-{
-    int in_attr, out_attr;
-    int i = 0;
-    const var_t *var;
-
-    if (!func->args)
-        return;
-
-    LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-    {
-        const expr_t *size_is = get_attrp(var->attrs, ATTR_SIZEIS);
-        int has_size = size_is && (size_is->type != EXPR_VOID);
-        int is_string = is_attr(var->attrs, ATTR_STRING);
-
-        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 && !has_size && !is_string)
-        {
-            int indirection;
-            print_server("");
-            write_type(server, var->type, NULL, var->tname);
-            for (indirection = 0; indirection < var->ptr_level - 1; indirection++)
-                fprintf(server, "*");
-            fprintf(server, " _W%u;\n", i++);
-        }
-
-        print_server("");
-        write_type(server, var->type, var, var->tname);
-        fprintf(server, " ");
-        write_name(server, var);
-        write_array(server, var->array, 0);
-        fprintf(server, ";\n");
-    }
-}
-
-
-static void assign_out_args(const func_t *func)
-{
-    int in_attr, out_attr;
-    int i = 0, sep = 0;
-    const var_t *var;
-    const expr_t *size_is;
-    int has_size;
-
-    if (!func->args)
-        return;
-
-    LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-    {
-        int is_string = is_attr(var->attrs, ATTR_STRING);
-        size_is = get_attrp(var->attrs, ATTR_SIZEIS);
-        has_size = size_is && (size_is->type != EXPR_VOID);
-        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_server("");
-            write_name(server, var);
-
-            if (has_size)
-            {
-                unsigned int size;
-                type_t *type = var->type;
-
-                fprintf(server, " = NdrAllocate(&_StubMsg, ");
-                write_expr(server, size_is, 1);
-                size = get_type_memsize(type);
-                fprintf(server, " * %u);\n", size);
-            }
-            else if (!is_string)
-            {
-                fprintf(server, " = &_W%u;\n", i);
-                if (var->ptr_level > 1)
-                    print_server("_W%u = 0;\n", i);
-                i++;
-            }
-
-            sep = 1;
-        }
-    }
-
-    if (sep)
-        fprintf(server, "\n");
-}
-
-
 static void write_function_stubs(type_t *iface, unsigned int *proc_offset, unsigned int *type_offset)
 {
     char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
@@ -215,16 +122,8 @@ static void write_function_stubs(type_t
         fprintf(server, "{\n");
         indent++;
 
-        /* declare return value '_RetVal' */
-        if (!is_void(def->type, NULL))
-        {
-            print_server("");
-            write_type(server, def->type, def, def->tname);
-            fprintf(server, " _RetVal;\n");
-        }
-
         /* Declare arguments */
-        declare_args(func);
+        declare_stub_args(server, indent, func);
 
         print_server("MIDL_STUB_MESSAGE _StubMsg;\n");
         print_server("RPC_STATUS _Status;\n");
@@ -291,7 +190,7 @@ static void write_function_stubs(type_t
         fprintf(server, "\n");
 
         /* Assign 'out' arguments */
-        assign_out_args(func);
+        assign_stub_out_args(server, indent, func);
 
         /* Call the real server function */
         if (!is_void(def->type, NULL))
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 5bba033..def9d4b 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -2099,6 +2099,108 @@ static void write_struct_expr(FILE *h, c
     }
 }
 
+
+void declare_stub_args( FILE *file, int indent, const func_t *func )
+{
+    int in_attr, out_attr;
+    int i = 0;
+    const var_t *def = func->def;
+    const var_t *var;
+
+    /* declare return value '_RetVal' */
+    if (!is_void(def->type, NULL))
+    {
+        print_file(file, indent, "");
+        write_type(file, def->type, def, def->tname);
+        fprintf(file, " _RetVal;\n");
+    }
+
+    if (!func->args)
+        return;
+
+    LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
+    {
+        const expr_t *size_is = get_attrp(var->attrs, ATTR_SIZEIS);
+        int has_size = size_is && (size_is->type != EXPR_VOID);
+        int is_string = is_attr(var->attrs, ATTR_STRING);
+
+        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 && !has_size && !is_string)
+        {
+            int indirection;
+            print_file(file, indent, "");
+            write_type(file, var->type, NULL, var->tname);
+            for (indirection = 0; indirection < var->ptr_level - 1; indirection++)
+                fprintf(file, "*");
+            fprintf(file, " _W%u;\n", i++);
+        }
+
+        print_file(file, indent, "");
+        write_type(file, var->type, var, var->tname);
+        fprintf(file, " ");
+        write_name(file, var);
+        write_array(file, var->array, 0);
+        fprintf(file, ";\n");
+    }
+}
+
+
+void assign_stub_out_args( FILE *file, int indent, const func_t *func )
+{
+    int in_attr, out_attr;
+    int i = 0, sep = 0;
+    const var_t *var;
+    const expr_t *size_is;
+    int has_size;
+
+    if (!func->args)
+        return;
+
+    LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
+    {
+        int is_string = is_attr(var->attrs, ATTR_STRING);
+        size_is = get_attrp(var->attrs, ATTR_SIZEIS);
+        has_size = size_is && (size_is->type != EXPR_VOID);
+        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, "");
+            write_name(file, var);
+
+            if (has_size)
+            {
+                unsigned int size;
+                type_t *type = var->type;
+
+                fprintf(file, " = NdrAllocate(&_StubMsg, ");
+                write_expr(file, size_is, 1);
+                size = get_type_memsize(type);
+                fprintf(file, " * %u);\n", size);
+            }
+            else if (!is_string)
+            {
+                fprintf(file, " = &_W%u;\n", i);
+                if (var->ptr_level > 1)
+                    print_file(file, indent, "_W%u = 0;\n", i);
+                i++;
+            }
+
+            sep = 1;
+        }
+    }
+    if (sep)
+        fprintf(file, "\n");
+}
+
+
 int write_expr_eval_routines(FILE *file, const char *iface)
 {
     int result = 0;
diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h
index 4e8b63d..63d2626 100644
--- a/tools/widl/typegen.h
+++ b/tools/widl/typegen.h
@@ -46,5 +46,7 @@ size_t get_size_procformatstring_var(con
 size_t get_size_typeformatstring_var(const var_t *var);
 size_t get_size_procformatstring(const ifref_list_t *ifaces, int for_objects);
 size_t get_size_typeformatstring(const ifref_list_t *ifaces, int for_objects);
+void assign_stub_out_args( FILE *file, int indent, const func_t *func );
+void declare_stub_args( FILE *file, int indent, const func_t *func );
 int write_expr_eval_routines(FILE *file, const char *iface);
 void write_expr_eval_routine_list(FILE *file, const char *iface);




More information about the wine-cvs mailing list