[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-cvs
Subject: Robert Shearman : widl:
From: Alexandre Julliard <julliard () wine ! codeweavers ! com>
Date: 2006-03-31 19:05:05
Message-ID: E1FPOvh-0004rM-6g () wine ! codeweavers ! com
[Download RAW message or body]
Module: wine
Branch: refs/heads/master
Commit: 506404ba09fe5e7a4501d3f15f55df65e12d3531
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=506404ba09fe5e7a4501d3f15f55df65e12d3531
Author: Robert Shearman <rob@codeweavers.com>
Date: Fri Mar 31 12:50:46 2006 +0100
widl: Only assign variables if not a string and only create a local variable if not a sized parameter.
Only assign variables if not a string and only create a local variable
if not a sized parameter. Fixes type mismatches in the generated code
due to differences in the algorithms between creating local variables
and using them.
---
tools/widl/server.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/widl/server.c b/tools/widl/server.c
index 9ffb6b5..5188965 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -101,12 +101,16 @@ static void declare_args(const func_t *f
while (NEXT_LINK(var)) var = NEXT_LINK(var);
while (var)
{
+ 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 && !is_attr(var->attrs, ATTR_STRING))
+ if (!in_attr && !has_size && !is_string)
{
int indirection;
print_server("");
@@ -143,6 +147,7 @@ static void assign_out_args(const func_t
while (NEXT_LINK(var)) var = NEXT_LINK(var);
while (var)
{
+ 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);
@@ -165,7 +170,7 @@ static void assign_out_args(const func_t
write_expr(server, size_is, 1);
fprintf(server, " * %u);\n", get_type_memsize(type));
}
- else
+ else if (!is_string)
{
fprintf(server, " = &_W%u;\n", i);
if (var->ptr_level > 1)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic