Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e8b6c052
Commit
e8b6c052
authored
Aug 15, 2019
by
Richard Pospesel
Committed by
Alexandre Julliard
Aug 16, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Pass a decl_spec_t to write_type_left().
Signed-off-by:
Zebediah Figura
<
z.figura12@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
aa2bd521
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
42 additions
and
35 deletions
+42
-35
client.c
tools/widl/client.c
+1
-1
header.c
tools/widl/header.c
+29
-23
header.h
tools/widl/header.h
+2
-2
proxy.c
tools/widl/proxy.c
+2
-2
server.c
tools/widl/server.c
+1
-1
typegen.c
tools/widl/typegen.c
+7
-6
No files found.
tools/widl/client.c
View file @
e8b6c052
...
...
@@ -54,7 +54,7 @@ static void write_client_func_decl( const type_t *iface, const var_t *func )
{
const
char
*
callconv
=
get_attrp
(
func
->
declspec
.
type
->
attrs
,
ATTR_CALLCONV
);
const
var_list_t
*
args
=
type_function_get_args
(
func
->
declspec
.
type
);
type_t
*
rettype
=
type_function_get_rettype
(
func
->
declspec
.
type
);
const
decl_spec_t
*
rettype
=
type_function_get_ret
(
func
->
declspec
.
type
);
if
(
!
callconv
)
callconv
=
"__cdecl"
;
write_type_decl_left
(
client
,
rettype
);
...
...
tools/widl/header.c
View file @
e8b6c052
...
...
@@ -294,8 +294,9 @@ static void write_pointer_left(FILE *h, type_t *ref)
fprintf
(
h
,
"*"
);
}
void
write_type_left
(
FILE
*
h
,
type_t
*
t
,
enum
name_type
name_type
,
int
declonly
)
void
write_type_left
(
FILE
*
h
,
const
decl_spec_t
*
ds
,
enum
name_type
name_type
,
int
declonly
)
{
type_t
*
t
=
ds
->
type
;
const
char
*
name
;
if
(
!
h
)
return
;
...
...
@@ -351,7 +352,7 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
break
;
case
TYPE_POINTER
:
{
write_type_left
(
h
,
type_pointer_get_ref
_type
(
t
),
name_type
,
declonly
);
write_type_left
(
h
,
type_pointer_get_ref
(
t
),
name_type
,
declonly
);
write_pointer_left
(
h
,
type_pointer_get_ref_type
(
t
));
if
(
is_attr
(
t
->
attrs
,
ATTR_CONST
))
fprintf
(
h
,
"const "
);
break
;
...
...
@@ -361,7 +362,7 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
fprintf
(
h
,
"%s"
,
t
->
name
);
else
{
write_type_left
(
h
,
type_array_get_element
_type
(
t
),
name_type
,
declonly
);
write_type_left
(
h
,
type_array_get_element
(
t
),
name_type
,
declonly
);
if
(
type_array_is_decl_as_ptr
(
t
))
write_pointer_left
(
h
,
type_array_get_element_type
(
t
));
}
...
...
@@ -423,8 +424,11 @@ void write_type_left(FILE *h, type_t *t, enum name_type name_type, int declonly)
fprintf
(
h
,
"void"
);
break
;
case
TYPE_BITFIELD
:
write_type_left
(
h
,
type_bitfield_get_field
(
t
),
name_type
,
declonly
);
{
const
decl_spec_t
ds
=
{.
type
=
type_bitfield_get_field
(
t
)};
write_type_left
(
h
,
&
ds
,
name_type
,
declonly
);
break
;
}
case
TYPE_ALIAS
:
case
TYPE_FUNCTION
:
/* handled elsewhere */
...
...
@@ -501,14 +505,14 @@ static void write_type_v(FILE *h, const decl_spec_t *ds, int is_field, int declo
const
char
*
callconv
=
get_attrp
(
pt
->
attrs
,
ATTR_CALLCONV
);
if
(
!
callconv
&&
is_object_interface
)
callconv
=
"STDMETHODCALLTYPE"
;
if
(
is_attr
(
pt
->
attrs
,
ATTR_INLINE
))
fprintf
(
h
,
"inline "
);
write_type_left
(
h
,
type_function_get_ret
type
(
pt
),
NAME_DEFAULT
,
declonly
);
write_type_left
(
h
,
type_function_get_ret
(
pt
),
NAME_DEFAULT
,
declonly
);
fputc
(
' '
,
h
);
if
(
ptr_level
)
fputc
(
'('
,
h
);
if
(
callconv
)
fprintf
(
h
,
"%s "
,
callconv
);
for
(
i
=
0
;
i
<
ptr_level
;
i
++
)
fputc
(
'*'
,
h
);
}
else
write_type_left
(
h
,
t
,
NAME_DEFAULT
,
declonly
);
write_type_left
(
h
,
ds
,
NAME_DEFAULT
,
declonly
);
}
if
(
name
)
fprintf
(
h
,
"%s%s"
,
!
t
||
needs_space_after
(
t
)
?
" "
:
""
,
name
);
...
...
@@ -538,6 +542,7 @@ static void write_type_definition(FILE *f, type_t *t)
{
int
in_namespace
=
t
->
namespace
&&
!
is_global_namespace
(
t
->
namespace
);
int
save_written
=
t
->
written
;
decl_spec_t
ds
=
{.
type
=
t
};
if
(
in_namespace
)
{
fprintf
(
f
,
"#ifdef __cplusplus
\n
"
);
...
...
@@ -545,14 +550,14 @@ static void write_type_definition(FILE *f, type_t *t)
write_namespace_start
(
f
,
t
->
namespace
);
}
indent
(
f
,
0
);
write_type_left
(
f
,
t
,
NAME_DEFAULT
,
FALSE
);
write_type_left
(
f
,
&
ds
,
NAME_DEFAULT
,
FALSE
);
fprintf
(
f
,
";
\n
"
);
if
(
in_namespace
)
{
t
->
written
=
save_written
;
write_namespace_end
(
f
,
t
->
namespace
);
fprintf
(
f
,
"extern
\"
C
\"
{
\n
"
);
fprintf
(
f
,
"#else
\n
"
);
write_type_left
(
f
,
t
,
NAME_C
,
FALSE
);
write_type_left
(
f
,
&
ds
,
NAME_C
,
FALSE
);
fprintf
(
f
,
";
\n
"
);
fprintf
(
f
,
"#endif
\n\n
"
);
}
...
...
@@ -563,9 +568,9 @@ void write_type_decl(FILE *f, const decl_spec_t *t, const char *name)
write_type_v
(
f
,
t
,
FALSE
,
TRUE
,
name
);
}
void
write_type_decl_left
(
FILE
*
f
,
type_t
*
t
)
void
write_type_decl_left
(
FILE
*
f
,
const
decl_spec_t
*
ds
)
{
write_type_left
(
f
,
t
,
NAME_DEFAULT
,
TRUE
);
write_type_left
(
f
,
ds
,
NAME_DEFAULT
,
TRUE
);
}
static
int
user_type_registered
(
const
char
*
name
)
...
...
@@ -1114,6 +1119,7 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
{
const
var_t
*
func
=
stmt
->
u
.
var
;
if
(
!
is_callas
(
func
->
attrs
))
{
const
decl_spec_t
*
ret
=
type_function_get_ret
(
func
->
declspec
.
type
);
const
char
*
callconv
=
get_attrp
(
func
->
declspec
.
type
->
attrs
,
ATTR_CALLCONV
);
const
var_list_t
*
args
=
type_function_get_args
(
func
->
declspec
.
type
);
const
var_t
*
arg
;
...
...
@@ -1125,11 +1131,11 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
indent
(
header
,
0
);
fprintf
(
header
,
"virtual "
);
write_type_decl_left
(
header
,
type_function_get_rettype
(
func
->
declspec
.
type
)
);
write_type_decl_left
(
header
,
ret
);
fprintf
(
header
,
"* %s %s(
\n
"
,
callconv
,
get_name
(
func
));
++
indentation
;
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_rettype
(
func
->
declspec
.
type
)
);
write_type_decl_left
(
header
,
ret
);
fprintf
(
header
,
" *__ret"
);
--
indentation
;
if
(
args
)
{
...
...
@@ -1139,7 +1145,7 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
fprintf
(
header
,
") = 0;
\n
"
);
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_rettype
(
func
->
declspec
.
type
)
);
write_type_decl_left
(
header
,
ret
);
fprintf
(
header
,
" %s %s(
\n
"
,
callconv
,
get_name
(
func
));
write_args
(
header
,
args
,
iface
->
name
,
2
,
TRUE
);
fprintf
(
header
,
")
\n
"
);
...
...
@@ -1147,7 +1153,7 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
fprintf
(
header
,
"{
\n
"
);
++
indentation
;
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_rettype
(
func
->
declspec
.
type
)
);
write_type_decl_left
(
header
,
ret
);
fprintf
(
header
,
" __ret;
\n
"
);
indent
(
header
,
0
);
fprintf
(
header
,
"return *%s(&__ret"
,
get_name
(
func
));
...
...
@@ -1164,7 +1170,7 @@ static void write_cpp_method_def(FILE *header, const type_t *iface)
indent
(
header
,
0
);
fprintf
(
header
,
"virtual "
);
write_type_decl_left
(
header
,
type_function_get_rettype
(
func
->
declspec
.
type
)
);
write_type_decl_left
(
header
,
ret
);
fprintf
(
header
,
" %s %s(
\n
"
,
callconv
,
get_name
(
func
));
write_args
(
header
,
args
,
iface
->
name
,
2
,
TRUE
);
fprintf
(
header
,
") = 0;
\n
"
);
...
...
@@ -1201,7 +1207,7 @@ static void write_inline_wrappers(FILE *header, const type_t *iface, const type_
const
var_t
*
arg
;
fprintf
(
header
,
"static FORCEINLINE "
);
write_type_decl_left
(
header
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
func
->
declspec
.
type
));
fprintf
(
header
,
" %s_%s("
,
name
,
get_name
(
func
));
write_args
(
header
,
type_function_get_args
(
func
->
declspec
.
type
),
name
,
1
,
FALSE
);
fprintf
(
header
,
") {
\n
"
);
...
...
@@ -1213,7 +1219,7 @@ static void write_inline_wrappers(FILE *header, const type_t *iface, const type_
get_vtbl_entry_name
(
iface
,
func
));
}
else
{
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
func
->
declspec
.
type
));
fprintf
(
header
,
" __ret;
\n
"
);
indent
(
header
,
0
);
fprintf
(
header
,
"return *This->lpVtbl->%s(This,&__ret"
,
get_vtbl_entry_name
(
iface
,
func
));
...
...
@@ -1248,7 +1254,7 @@ static void do_write_c_method_def(FILE *header, const type_t *iface, const char
const
char
*
callconv
=
get_attrp
(
func
->
declspec
.
type
->
attrs
,
ATTR_CALLCONV
);
if
(
!
callconv
)
callconv
=
"STDMETHODCALLTYPE"
;
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
func
->
declspec
.
type
));
if
(
is_aggregate_return
(
func
))
fprintf
(
header
,
" *"
);
if
(
is_inherited_method
(
iface
,
func
))
...
...
@@ -1261,7 +1267,7 @@ static void do_write_c_method_def(FILE *header, const type_t *iface, const char
if
(
is_aggregate_return
(
func
))
{
fprintf
(
header
,
",
\n
"
);
indent
(
header
,
0
);
write_type_decl_left
(
header
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
func
->
declspec
.
type
));
fprintf
(
header
,
" *__ret"
);
}
--
indentation
;
...
...
@@ -1297,7 +1303,7 @@ static void write_method_proto(FILE *header, const type_t *iface)
const
char
*
callconv
=
get_attrp
(
func
->
declspec
.
type
->
attrs
,
ATTR_CALLCONV
);
if
(
!
callconv
)
callconv
=
"STDMETHODCALLTYPE"
;
/* proxy prototype */
write_type_decl_left
(
header
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
func
->
declspec
.
type
));
fprintf
(
header
,
" %s %s_%s_Proxy(
\n
"
,
callconv
,
iface
->
name
,
get_name
(
func
));
write_args
(
header
,
type_function_get_args
(
func
->
declspec
.
type
),
iface
->
name
,
1
,
TRUE
);
fprintf
(
header
,
");
\n
"
);
...
...
@@ -1332,7 +1338,7 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
if
(
&
stmt2
->
entry
!=
type_iface_get_stmts
(
iface
))
{
const
var_t
*
m
=
stmt2
->
u
.
var
;
/* proxy prototype - use local prototype */
write_type_decl_left
(
fp
,
type_function_get_ret
type
(
m
->
declspec
.
type
));
write_type_decl_left
(
fp
,
type_function_get_ret
(
m
->
declspec
.
type
));
fprintf
(
fp
,
" CALLBACK %s_%s_Proxy(
\n
"
,
iface
->
name
,
get_name
(
m
));
write_args
(
fp
,
type_function_get_args
(
m
->
declspec
.
type
),
iface
->
name
,
1
,
TRUE
);
fprintf
(
fp
,
")"
);
...
...
@@ -1354,7 +1360,7 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
else
fprintf
(
fp
,
";
\n
"
);
/* stub prototype - use remotable prototype */
write_type_decl_left
(
fp
,
type_function_get_ret
type
(
func
->
declspec
.
type
));
write_type_decl_left
(
fp
,
type_function_get_ret
(
func
->
declspec
.
type
));
fprintf
(
fp
,
" __RPC_STUB %s_%s_Stub(
\n
"
,
iface
->
name
,
get_name
(
m
));
write_args
(
fp
,
type_function_get_args
(
func
->
declspec
.
type
),
iface
->
name
,
1
,
TRUE
);
fprintf
(
fp
,
")"
);
...
...
@@ -1406,7 +1412,7 @@ static void write_function_proto(FILE *header, const type_t *iface, const var_t
if
(
!
callconv
)
callconv
=
"__cdecl"
;
/* FIXME: do we need to handle call_as? */
write_type_decl_left
(
header
,
type_function_get_ret
type
(
fun
->
declspec
.
type
));
write_type_decl_left
(
header
,
type_function_get_ret
(
fun
->
declspec
.
type
));
fprintf
(
header
,
" %s "
,
callconv
);
fprintf
(
header
,
"%s%s(
\n
"
,
prefix
,
get_name
(
fun
));
if
(
type_function_get_args
(
fun
->
declspec
.
type
))
...
...
tools/widl/header.h
View file @
e8b6c052
...
...
@@ -29,10 +29,10 @@ extern int is_attr(const attr_list_t *list, enum attr_type t);
extern
void
*
get_attrp
(
const
attr_list_t
*
list
,
enum
attr_type
t
);
extern
unsigned
int
get_attrv
(
const
attr_list_t
*
list
,
enum
attr_type
t
);
extern
const
char
*
get_name
(
const
var_t
*
v
);
extern
void
write_type_left
(
FILE
*
h
,
type_t
*
t
,
enum
name_type
name_type
,
int
declonly
);
extern
void
write_type_left
(
FILE
*
h
,
const
decl_spec_t
*
ds
,
enum
name_type
name_type
,
int
declonly
);
extern
void
write_type_right
(
FILE
*
h
,
type_t
*
t
,
int
is_field
);
extern
void
write_type_decl
(
FILE
*
f
,
const
decl_spec_t
*
t
,
const
char
*
name
);
extern
void
write_type_decl_left
(
FILE
*
f
,
type_t
*
t
);
extern
void
write_type_decl_left
(
FILE
*
f
,
const
decl_spec_t
*
ds
);
extern
unsigned
int
get_context_handle_offset
(
const
type_t
*
type
);
extern
unsigned
int
get_generic_handle_offset
(
const
type_t
*
type
);
extern
int
needs_space_after
(
type_t
*
t
);
...
...
tools/widl/proxy.c
View file @
e8b6c052
...
...
@@ -202,7 +202,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
if
(
is_interpreted_func
(
iface
,
func
))
{
if
(
get_stub_mode
()
==
MODE_Oif
&&
!
is_callas
(
func
->
attrs
))
return
;
write_type_decl_left
(
proxy
,
retval
->
declspec
.
type
);
write_type_decl_left
(
proxy
,
&
retval
->
declspec
);
print_proxy
(
" %s %s_%s_Proxy(
\n
"
,
callconv
,
iface
->
name
,
get_name
(
func
));
write_args
(
proxy
,
args
,
iface
->
name
,
1
,
TRUE
);
print_proxy
(
")
\n
"
);
...
...
@@ -219,7 +219,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
print_proxy
(
"}
\n
"
);
print_proxy
(
"
\n
"
);
write_type_decl_left
(
proxy
,
retval
->
declspec
.
type
);
write_type_decl_left
(
proxy
,
&
retval
->
declspec
);
print_proxy
(
" %s %s_%s_Proxy(
\n
"
,
callconv
,
iface
->
name
,
get_name
(
func
));
write_args
(
proxy
,
args
,
iface
->
name
,
1
,
TRUE
);
print_proxy
(
")
\n
"
);
...
...
tools/widl/server.c
View file @
e8b6c052
...
...
@@ -185,7 +185,7 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
* be direct, otherwise it is a pointer */
const
char
*
ch_ptr
=
is_aliaschain_attr
(
var
->
declspec
.
type
,
ATTR_CONTEXTHANDLE
)
?
"*"
:
""
;
print_server
(
"("
);
write_type_decl_left
(
server
,
var
->
declspec
.
type
);
write_type_decl_left
(
server
,
&
var
->
declspec
);
fprintf
(
server
,
")%sNDRSContextValue(__frame->%s)"
,
ch_ptr
,
var
->
name
);
}
else
...
...
tools/widl/typegen.c
View file @
e8b6c052
...
...
@@ -4652,7 +4652,7 @@ void declare_stub_args( FILE *file, int indent, const var_t *func )
}
print_file
(
file
,
indent
,
"%s"
,
""
);
write_type_decl_left
(
file
,
var
->
declspec
.
type
);
write_type_decl_left
(
file
,
&
var
->
declspec
);
fprintf
(
file
,
" "
);
if
(
type_get_type
(
var
->
declspec
.
type
)
==
TYPE_ARRAY
&&
!
type_array_is_decl_as_ptr
(
var
->
declspec
.
type
))
{
...
...
@@ -4805,7 +4805,7 @@ void write_func_param_struct( FILE *file, const type_t *iface, const type_t *fun
if
(
args
)
LIST_FOR_EACH_ENTRY
(
arg
,
args
,
const
var_t
,
entry
)
{
print_file
(
file
,
2
,
"%s"
,
""
);
write_type_left
(
file
,
(
type_t
*
)
arg
->
declspec
.
type
,
NAME_DEFAULT
,
TRUE
);
write_type_left
(
file
,
&
arg
->
declspec
,
NAME_DEFAULT
,
TRUE
);
if
(
needs_space_after
(
arg
->
declspec
.
type
))
fputc
(
' '
,
file
);
if
(
is_array
(
arg
->
declspec
.
type
)
&&
!
type_array_is_decl_as_ptr
(
arg
->
declspec
.
type
))
fputc
(
'*'
,
file
);
...
...
@@ -4869,10 +4869,11 @@ int write_expr_eval_routines(FILE *file, const char *iface)
}
else
{
decl_spec_t
ds
=
{.
type
=
(
type_t
*
)
eval
->
cont_type
};
print_file
(
file
,
1
,
"%s"
,
""
);
write_type_left
(
file
,
(
type_t
*
)
eval
->
cont_type
,
NAME_DEFAULT
,
TRUE
);
write_type_left
(
file
,
&
ds
,
NAME_DEFAULT
,
TRUE
);
fprintf
(
file
,
" *%s = ("
,
var_name
);
write_type_left
(
file
,
(
type_t
*
)
eval
->
cont_type
,
NAME_DEFAULT
,
TRUE
);
write_type_left
(
file
,
&
ds
,
NAME_DEFAULT
,
TRUE
);
fprintf
(
file
,
" *)(pStubMsg->StackTop - %u);
\n
"
,
eval
->
baseoff
);
}
print_file
(
file
,
1
,
"pStubMsg->Offset = 0;
\n
"
);
/* FIXME */
...
...
@@ -4966,8 +4967,8 @@ error:
void
write_client_call_routine
(
FILE
*
file
,
const
type_t
*
iface
,
const
var_t
*
func
,
const
char
*
prefix
,
unsigned
int
proc_offset
)
{
type_t
*
rettype
=
type_function_get_rettype
(
func
->
declspec
.
type
);
int
has_ret
=
!
is_void
(
rettype
);
const
decl_spec_t
*
rettype
=
type_function_get_ret
(
func
->
declspec
.
type
);
int
has_ret
=
!
is_void
(
rettype
->
type
);
const
var_list_t
*
args
=
type_function_get_args
(
func
->
declspec
.
type
);
const
var_t
*
arg
;
int
len
,
needs_params
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment