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
896b4f05
Commit
896b4f05
authored
Apr 01, 2024
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Always use new-style format strings in interpreted mode.
parent
7cd0f395
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
38 additions
and
103 deletions
+38
-103
client.c
tools/widl/client.c
+4
-5
proxy.c
tools/widl/proxy.c
+11
-12
server.c
tools/widl/server.c
+2
-2
typegen.c
tools/widl/typegen.c
+14
-64
widl.c
tools/widl/widl.c
+6
-13
widl.h
tools/widl/widl.h
+1
-7
No files found.
tools/widl/client.c
View file @
896b4f05
...
@@ -285,7 +285,6 @@ static void write_function_stub( const type_t *iface, const var_t *func,
...
@@ -285,7 +285,6 @@ static void write_function_stub( const type_t *iface, const var_t *func,
static
void
write_serialize_function
(
FILE
*
file
,
const
type_t
*
type
,
const
type_t
*
iface
,
static
void
write_serialize_function
(
FILE
*
file
,
const
type_t
*
type
,
const
type_t
*
iface
,
const
char
*
func_name
,
const
char
*
ret_type
)
const
char
*
func_name
,
const
char
*
ret_type
)
{
{
enum
stub_mode
mode
=
get_stub_mode
();
static
int
emitted_pickling_info
;
static
int
emitted_pickling_info
;
if
(
iface
&&
!
type
->
typestring_offset
)
if
(
iface
&&
!
type
->
typestring_offset
)
...
@@ -296,7 +295,7 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
...
@@ -296,7 +295,7 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
return
;
return
;
}
}
if
(
!
emitted_pickling_info
&&
iface
&&
mode
!=
MODE_Os
)
if
(
!
emitted_pickling_info
&&
iface
&&
interpreted_mode
)
{
{
fprintf
(
file
,
"static const MIDL_TYPE_PICKLING_INFO __MIDL_TypePicklingInfo =
\n
"
);
fprintf
(
file
,
"static const MIDL_TYPE_PICKLING_INFO __MIDL_TypePicklingInfo =
\n
"
);
fprintf
(
file
,
"{
\n
"
);
fprintf
(
file
,
"{
\n
"
);
...
@@ -318,9 +317,9 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
...
@@ -318,9 +317,9 @@ static void write_serialize_function(FILE *file, const type_t *type, const type_
fprintf
(
file
,
"{
\n
"
);
fprintf
(
file
,
"{
\n
"
);
fprintf
(
file
,
" %sNdrMesType%s%s(
\n
"
,
ret_type
?
"return "
:
""
,
func_name
,
fprintf
(
file
,
" %sNdrMesType%s%s(
\n
"
,
ret_type
?
"return "
:
""
,
func_name
,
mode
!=
MODE_Os
?
"2"
:
""
);
interpreted_mode
?
"2"
:
""
);
fprintf
(
file
,
" IDL_handle,
\n
"
);
fprintf
(
file
,
" IDL_handle,
\n
"
);
if
(
mode
!=
MODE_Os
)
if
(
interpreted_mode
)
fprintf
(
file
,
" (MIDL_TYPE_PICKLING_INFO*)&__MIDL_TypePicklingInfo,
\n
"
);
fprintf
(
file
,
" (MIDL_TYPE_PICKLING_INFO*)&__MIDL_TypePicklingInfo,
\n
"
);
fprintf
(
file
,
" &%s_StubDesc,
\n
"
,
iface
->
name
);
fprintf
(
file
,
" &%s_StubDesc,
\n
"
,
iface
->
name
);
fprintf
(
file
,
" (PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],
\n
"
,
fprintf
(
file
,
" (PFORMAT_STRING)&__MIDL_TypeFormatString.Format[%u],
\n
"
,
...
@@ -418,7 +417,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
...
@@ -418,7 +417,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
print_client
(
"0,
\n
"
);
print_client
(
"0,
\n
"
);
print_client
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_client
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_client
(
"1, /* -error bounds_check flag */
\n
"
);
print_client
(
"1, /* -error bounds_check flag */
\n
"
);
print_client
(
"0x%x, /* Ndr library version */
\n
"
,
get_stub_mode
()
==
MODE_Oif
?
0x50002
:
0x10001
);
print_client
(
"0x%x, /* Ndr library version */
\n
"
,
interpreted_mode
?
0x50002
:
0x10001
);
print_client
(
"0,
\n
"
);
print_client
(
"0,
\n
"
);
print_client
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_client
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_client
(
"0,
\n
"
);
print_client
(
"0,
\n
"
);
...
...
tools/widl/proxy.c
View file @
896b4f05
...
@@ -61,7 +61,7 @@ static void write_stubdesc(int expr_eval_routines)
...
@@ -61,7 +61,7 @@ static void write_stubdesc(int expr_eval_routines)
print_proxy
(
"{0}, 0, 0, %s, 0,
\n
"
,
expr_eval_routines
?
"ExprEvalRoutines"
:
"0"
);
print_proxy
(
"{0}, 0, 0, %s, 0,
\n
"
,
expr_eval_routines
?
"ExprEvalRoutines"
:
"0"
);
print_proxy
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_proxy
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_proxy
(
"1, /* -error bounds_check flag */
\n
"
);
print_proxy
(
"1, /* -error bounds_check flag */
\n
"
);
print_proxy
(
"0x%x, /* Ndr library version */
\n
"
,
get_stub_mode
()
==
MODE_Oif
?
0x50002
:
0x10001
);
print_proxy
(
"0x%x, /* Ndr library version */
\n
"
,
interpreted_mode
?
0x50002
:
0x10001
);
print_proxy
(
"0,
\n
"
);
print_proxy
(
"0,
\n
"
);
print_proxy
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_proxy
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_proxy
(
"0,
\n
"
);
print_proxy
(
"0,
\n
"
);
...
@@ -193,7 +193,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
...
@@ -193,7 +193,7 @@ static void gen_proxy(type_t *iface, const var_t *func, int idx,
indent
=
0
;
indent
=
0
;
if
(
is_interpreted_func
(
iface
,
func
))
if
(
is_interpreted_func
(
iface
,
func
))
{
{
if
(
get_stub_mode
()
==
MODE_Oif
&&
!
is_callas
(
func
->
attrs
))
return
;
if
(
!
is_callas
(
func
->
attrs
))
return
;
write_type_decl_left
(
proxy
,
&
retval
->
declspec
);
write_type_decl_left
(
proxy
,
&
retval
->
declspec
);
print_proxy
(
" %s %s_%s_Proxy(
\n
"
,
callconv
,
iface
->
name
,
get_name
(
func
));
print_proxy
(
" %s %s_%s_Proxy(
\n
"
,
callconv
,
iface
->
name
,
get_name
(
func
));
write_args
(
proxy
,
args
,
iface
->
name
,
1
,
TRUE
,
NAME_DEFAULT
);
write_args
(
proxy
,
args
,
iface
->
name
,
1
,
TRUE
,
NAME_DEFAULT
);
...
@@ -519,7 +519,6 @@ static int write_proxy_methods(type_t *iface, int skip)
...
@@ -519,7 +519,6 @@ static int write_proxy_methods(type_t *iface, int skip)
if
(
skip
||
(
is_local
(
func
->
attrs
)
&&
!
get_callas_source
(
iface
,
func
)))
if
(
skip
||
(
is_local
(
func
->
attrs
)
&&
!
get_callas_source
(
iface
,
func
)))
print_proxy
(
"0, /* %s::%s */
\n
"
,
iface
->
name
,
get_name
(
func
));
print_proxy
(
"0, /* %s::%s */
\n
"
,
iface
->
name
,
get_name
(
func
));
else
if
(
is_interpreted_func
(
iface
,
func
)
&&
else
if
(
is_interpreted_func
(
iface
,
func
)
&&
get_stub_mode
()
==
MODE_Oif
&&
!
is_local
(
func
->
attrs
)
&&
!
is_local
(
func
->
attrs
)
&&
type_iface_get_inherit
(
iface
))
type_iface_get_inherit
(
iface
))
print_proxy
(
"(void *)-1, /* %s::%s */
\n
"
,
iface
->
name
,
get_name
(
func
));
print_proxy
(
"(void *)-1, /* %s::%s */
\n
"
,
iface
->
name
,
get_name
(
func
));
...
@@ -556,7 +555,7 @@ static int write_stub_methods(type_t *iface, int skip)
...
@@ -556,7 +555,7 @@ static int write_stub_methods(type_t *iface, int skip)
if
(
i
)
fprintf
(
proxy
,
",
\n
"
);
if
(
i
)
fprintf
(
proxy
,
",
\n
"
);
if
(
skip
||
missing
)
print_proxy
(
"STUB_FORWARDING_FUNCTION"
);
if
(
skip
||
missing
)
print_proxy
(
"STUB_FORWARDING_FUNCTION"
);
else
if
(
is_interpreted_func
(
iface
,
func
))
else
if
(
is_interpreted_func
(
iface
,
func
))
print_proxy
(
"(PRPC_STUB_FUNCTION)%s"
,
get_stub_mode
()
==
MODE_Oif
?
"NdrStubCall2"
:
"NdrStubCall"
);
print_proxy
(
"(PRPC_STUB_FUNCTION)%s"
,
interpreted_mode
?
"NdrStubCall2"
:
"NdrStubCall"
);
else
print_proxy
(
"%s_%s_Stub"
,
iface
->
name
,
fname
);
else
print_proxy
(
"%s_%s_Stub"
,
iface
->
name
,
fname
);
i
++
;
i
++
;
}
}
...
@@ -641,7 +640,7 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
...
@@ -641,7 +640,7 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
print_proxy
(
"};
\n\n
"
);
print_proxy
(
"};
\n\n
"
);
/* proxy info */
/* proxy info */
if
(
get_stub_mode
()
==
MODE_Oif
)
if
(
interpreted_mode
)
{
{
print_proxy
(
"static const MIDL_STUBLESS_PROXY_INFO %s_ProxyInfo =
\n
"
,
iface
->
name
);
print_proxy
(
"static const MIDL_STUBLESS_PROXY_INFO %s_ProxyInfo =
\n
"
,
iface
->
name
);
print_proxy
(
"{
\n
"
);
print_proxy
(
"{
\n
"
);
...
@@ -658,13 +657,13 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
...
@@ -658,13 +657,13 @@ static void write_proxy(type_t *iface, unsigned int *proc_offset)
/* proxy vtable */
/* proxy vtable */
print_proxy
(
"static %sCINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =
\n
"
,
print_proxy
(
"static %sCINTERFACE_PROXY_VTABLE(%d) _%sProxyVtbl =
\n
"
,
(
get_stub_mode
()
!=
MODE_Os
||
need_delegation_indirect
(
iface
))
?
""
:
"const "
,
(
interpreted_mode
||
need_delegation_indirect
(
iface
))
?
""
:
"const "
,
count
,
iface
->
name
);
count
,
iface
->
name
);
print_proxy
(
"{
\n
"
);
print_proxy
(
"{
\n
"
);
indent
++
;
indent
++
;
print_proxy
(
"{
\n
"
);
print_proxy
(
"{
\n
"
);
indent
++
;
indent
++
;
if
(
get_stub_mode
()
==
MODE_Oif
)
print_proxy
(
"&%s_ProxyInfo,
\n
"
,
iface
->
name
);
if
(
interpreted_mode
)
print_proxy
(
"&%s_ProxyInfo,
\n
"
,
iface
->
name
);
print_proxy
(
"&IID_%s,
\n
"
,
iface
->
name
);
print_proxy
(
"&IID_%s,
\n
"
,
iface
->
name
);
indent
--
;
indent
--
;
print_proxy
(
"},
\n
"
);
print_proxy
(
"},
\n
"
);
...
@@ -785,7 +784,7 @@ int need_inline_stubs(const type_t *iface)
...
@@ -785,7 +784,7 @@ int need_inline_stubs(const type_t *iface)
{
{
const
statement_t
*
stmt
;
const
statement_t
*
stmt
;
if
(
get_stub_mode
()
==
MODE_Os
)
return
1
;
if
(
!
interpreted_mode
)
return
1
;
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
)
)
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
)
)
{
{
...
@@ -801,7 +800,7 @@ static int need_proxy_and_inline_stubs(const type_t *iface)
...
@@ -801,7 +800,7 @@ static int need_proxy_and_inline_stubs(const type_t *iface)
const
statement_t
*
stmt
;
const
statement_t
*
stmt
;
if
(
!
need_proxy
(
iface
))
return
0
;
if
(
!
need_proxy
(
iface
))
return
0
;
if
(
get_stub_mode
()
==
MODE_Os
)
return
1
;
if
(
!
interpreted_mode
)
return
1
;
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
)
)
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
)
)
{
{
...
@@ -895,10 +894,10 @@ static void write_proxy_routines(const statement_list_t *stmts)
...
@@ -895,10 +894,10 @@ static void write_proxy_routines(const statement_list_t *stmts)
const
type_t
*
delegate_to
;
const
type_t
*
delegate_to
;
print_proxy
(
"#ifndef __REDQ_RPCPROXY_H_VERSION__
\n
"
);
print_proxy
(
"#ifndef __REDQ_RPCPROXY_H_VERSION__
\n
"
);
print_proxy
(
"#define __REQUIRED_RPCPROXY_H_VERSION__ %u
\n
"
,
get_stub_mode
()
==
MODE_Oif
?
475
:
440
);
print_proxy
(
"#define __REQUIRED_RPCPROXY_H_VERSION__ %u
\n
"
,
interpreted_mode
?
475
:
440
);
print_proxy
(
"#endif
\n
"
);
print_proxy
(
"#endif
\n
"
);
print_proxy
(
"
\n
"
);
print_proxy
(
"
\n
"
);
if
(
get_stub_mode
()
==
MODE_Oif
)
print_proxy
(
"#define USE_STUBLESS_PROXY
\n
"
);
if
(
interpreted_mode
)
print_proxy
(
"#define USE_STUBLESS_PROXY
\n
"
);
print_proxy
(
"#include
\"
rpcproxy.h
\"\n
"
);
print_proxy
(
"#include
\"
rpcproxy.h
\"\n
"
);
print_proxy
(
"#ifndef __RPCPROXY_H_VERSION__
\n
"
);
print_proxy
(
"#ifndef __RPCPROXY_H_VERSION__
\n
"
);
print_proxy
(
"#error This code needs a newer version of rpcproxy.h
\n
"
);
print_proxy
(
"#error This code needs a newer version of rpcproxy.h
\n
"
);
...
@@ -1002,7 +1001,7 @@ static void write_proxy_routines(const statement_list_t *stmts)
...
@@ -1002,7 +1001,7 @@ static void write_proxy_routines(const statement_list_t *stmts)
fprintf
(
proxy
,
"}
\n
"
);
fprintf
(
proxy
,
"}
\n
"
);
fprintf
(
proxy
,
"
\n
"
);
fprintf
(
proxy
,
"
\n
"
);
table_version
=
get_stub_mode
()
==
MODE_Oif
?
2
:
1
;
table_version
=
interpreted_mode
?
2
:
1
;
for
(
i
=
0
;
i
<
count
;
i
++
)
for
(
i
=
0
;
i
<
count
;
i
++
)
{
{
if
(
type_iface_get_async_iface
(
interfaces
[
i
])
!=
interfaces
[
i
])
continue
;
if
(
type_iface_get_async_iface
(
interfaces
[
i
])
!=
interfaces
[
i
])
continue
;
...
...
tools/widl/server.c
View file @
896b4f05
...
@@ -273,7 +273,7 @@ static void write_dispatchtable(type_t *iface)
...
@@ -273,7 +273,7 @@ static void write_dispatchtable(type_t *iface)
{
{
var_t
*
func
=
stmt
->
u
.
var
;
var_t
*
func
=
stmt
->
u
.
var
;
if
(
is_interpreted_func
(
iface
,
func
))
if
(
is_interpreted_func
(
iface
,
func
))
print_server
(
"
%s,
\n
"
,
get_stub_mode
()
==
MODE_Oif
?
"NdrServerCall2"
:
"NdrServerCall
"
);
print_server
(
"
NdrServerCall2,
\n
"
);
else
else
print_server
(
"%s_%s,
\n
"
,
iface
->
name
,
get_name
(
func
));
print_server
(
"%s_%s,
\n
"
,
iface
->
name
,
get_name
(
func
));
method_count
++
;
method_count
++
;
...
@@ -380,7 +380,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
...
@@ -380,7 +380,7 @@ static void write_stubdescriptor(type_t *iface, int expr_eval_routines)
print_server
(
"0,
\n
"
);
print_server
(
"0,
\n
"
);
print_server
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_server
(
"__MIDL_TypeFormatString.Format,
\n
"
);
print_server
(
"1, /* -error bounds_check flag */
\n
"
);
print_server
(
"1, /* -error bounds_check flag */
\n
"
);
print_server
(
"0x%x, /* Ndr library version */
\n
"
,
get_stub_mode
()
==
MODE_Oif
?
0x50002
:
0x10001
);
print_server
(
"0x%x, /* Ndr library version */
\n
"
,
interpreted_mode
?
0x50002
:
0x10001
);
print_server
(
"0,
\n
"
);
print_server
(
"0,
\n
"
);
print_server
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_server
(
"0x50200ca, /* MIDL Version 5.2.202 */
\n
"
);
print_server
(
"0,
\n
"
);
print_server
(
"0,
\n
"
);
...
...
tools/widl/typegen.c
View file @
896b4f05
...
@@ -1242,7 +1242,7 @@ static unsigned int write_new_procformatstring_type(FILE *file, int indent, cons
...
@@ -1242,7 +1242,7 @@ static unsigned int write_new_procformatstring_type(FILE *file, int indent, cons
}
}
static
unsigned
int
write_old_procformatstring_type
(
FILE
*
file
,
int
indent
,
const
var_t
*
var
,
static
unsigned
int
write_old_procformatstring_type
(
FILE
*
file
,
int
indent
,
const
var_t
*
var
,
int
is_return
,
int
is_interpreted
)
int
is_return
)
{
{
unsigned
int
size
;
unsigned
int
size
;
...
@@ -1281,7 +1281,7 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
...
@@ -1281,7 +1281,7 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
{
{
unsigned
short
offset
=
var
->
typestring_offset
;
unsigned
short
offset
=
var
->
typestring_offset
;
if
(
!
is_interpreted
&&
is_array
(
var
->
declspec
.
type
)
if
(
is_array
(
var
->
declspec
.
type
)
&&
type_array_is_decl_as_ptr
(
var
->
declspec
.
type
)
&&
type_array_is_decl_as_ptr
(
var
->
declspec
.
type
)
&&
type_array_get_ptr_tfsoff
(
var
->
declspec
.
type
))
&&
type_array_get_ptr_tfsoff
(
var
->
declspec
.
type
))
offset
=
var
->
declspec
.
type
->
typestring_offset
;
offset
=
var
->
declspec
.
type
->
typestring_offset
;
...
@@ -1306,8 +1306,6 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
...
@@ -1306,8 +1306,6 @@ static unsigned int write_old_procformatstring_type(FILE *file, int indent, cons
int
is_interpreted_func
(
const
type_t
*
iface
,
const
var_t
*
func
)
int
is_interpreted_func
(
const
type_t
*
iface
,
const
var_t
*
func
)
{
{
const
char
*
str
;
const
char
*
str
;
const
var_t
*
var
;
const
var_list_t
*
args
=
type_function_get_args
(
func
->
declspec
.
type
);
const
type_t
*
ret_type
=
type_function_get_rettype
(
func
->
declspec
.
type
);
const
type_t
*
ret_type
=
type_function_get_rettype
(
func
->
declspec
.
type
);
if
(
type_get_type
(
ret_type
)
==
TYPE_BASIC
)
if
(
type_get_type
(
ret_type
)
==
TYPE_BASIC
)
...
@@ -1327,30 +1325,9 @@ int is_interpreted_func( const type_t *iface, const var_t *func )
...
@@ -1327,30 +1325,9 @@ int is_interpreted_func( const type_t *iface, const var_t *func )
break
;
break
;
}
}
}
}
if
(
get_stub_mode
()
!=
MODE_Oif
&&
args
)
{
LIST_FOR_EACH_ENTRY
(
var
,
args
,
const
var_t
,
entry
)
switch
(
type_get_type
(
var
->
declspec
.
type
))
{
case
TYPE_BASIC
:
switch
(
type_basic_get_type
(
var
->
declspec
.
type
))
{
/* floating point arguments are not supported in Oi mode */
case
TYPE_BASIC_FLOAT
:
return
0
;
case
TYPE_BASIC_DOUBLE
:
return
0
;
default:
break
;
}
break
;
/* unions passed by value are not supported in Oi mode */
case
TYPE_UNION
:
return
0
;
case
TYPE_ENCAPSULATED_UNION
:
return
0
;
default:
break
;
}
}
if
((
str
=
get_attrp
(
func
->
attrs
,
ATTR_OPTIMIZE
)))
return
!
strcmp
(
str
,
"i"
);
if
((
str
=
get_attrp
(
func
->
attrs
,
ATTR_OPTIMIZE
)))
return
!
strcmp
(
str
,
"i"
);
if
((
str
=
get_attrp
(
iface
->
attrs
,
ATTR_OPTIMIZE
)))
return
!
strcmp
(
str
,
"i"
);
if
((
str
=
get_attrp
(
iface
->
attrs
,
ATTR_OPTIMIZE
)))
return
!
strcmp
(
str
,
"i"
);
return
(
get_stub_mode
()
!=
MODE_Os
)
;
return
interpreted_mode
;
}
}
static
void
write_proc_func_interp
(
FILE
*
file
,
int
indent
,
const
type_t
*
iface
,
static
void
write_proc_func_interp
(
FILE
*
file
,
int
indent
,
const
type_t
*
iface
,
...
@@ -1364,18 +1341,22 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
...
@@ -1364,18 +1341,22 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
var_t
*
retval
=
type_function_get_retval
(
func
->
declspec
.
type
);
var_t
*
retval
=
type_function_get_retval
(
func
->
declspec
.
type
);
const
var_t
*
handle_var
=
get_func_handle_var
(
iface
,
func
,
&
explicit_fc
,
&
implicit_fc
);
const
var_t
*
handle_var
=
get_func_handle_var
(
iface
,
func
,
&
explicit_fc
,
&
implicit_fc
);
unsigned
char
oi_flags
=
Oi_HAS_RPCFLAGS
|
Oi_USE_NEW_INIT_ROUTINES
;
unsigned
char
oi_flags
=
Oi_HAS_RPCFLAGS
|
Oi_USE_NEW_INIT_ROUTINES
;
unsigned
char
oi2_flags
=
get_func_oi2_flags
(
func
);
unsigned
char
ext_flags
=
0
;
unsigned
int
rpc_flags
=
get_rpc_flags
(
func
->
attrs
);
unsigned
int
rpc_flags
=
get_rpc_flags
(
func
->
attrs
);
unsigned
int
nb_args
=
0
;
unsigned
int
nb_args
=
0
;
unsigned
int
stack_size
=
0
;
unsigned
int
stack_size
=
0
;
unsigned
int
stack_offset
=
0
;
unsigned
short
param_num
=
0
;
unsigned
short
param_num
=
0
;
unsigned
short
handle_stack_offset
=
0
;
unsigned
short
handle_stack_offset
=
0
;
unsigned
short
handle_param_num
=
0
;
unsigned
short
handle_param_num
=
0
;
unsigned
int
size
;
if
(
is_full_pointer_function
(
func
))
oi_flags
|=
Oi_FULL_PTR_USED
;
if
(
is_full_pointer_function
(
func
))
oi_flags
|=
Oi_FULL_PTR_USED
;
if
(
is_object
(
iface
))
if
(
is_object
(
iface
))
{
{
oi_flags
|=
Oi_OBJECT_PROC
;
oi_flags
|=
Oi_OBJECT_PROC
|
Oi_OBJ_USE_V2_INTERPRETER
;
if
(
get_stub_mode
()
==
MODE_Oif
)
oi_flags
|=
Oi_OBJ_USE_V2_INTERPRETER
;
stack_offset
=
pointer_size
;
stack_size
+=
pointer_size
;
stack_size
+=
pointer_size
;
}
}
...
@@ -1441,13 +1422,6 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
...
@@ -1441,13 +1422,6 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
}
}
}
}
if
(
get_stub_mode
()
==
MODE_Oif
)
{
unsigned
int
stack_offset
=
is_object
(
iface
)
?
pointer_size
:
0
;
unsigned
char
oi2_flags
=
get_func_oi2_flags
(
func
);
unsigned
char
ext_flags
=
0
;
unsigned
int
size
;
if
(
is_attr
(
func
->
attrs
,
ATTR_NOTIFY
))
ext_flags
|=
0x08
;
/* HasNotify */
if
(
is_attr
(
func
->
attrs
,
ATTR_NOTIFY
))
ext_flags
|=
0x08
;
/* HasNotify */
if
(
is_attr
(
func
->
attrs
,
ATTR_NOTIFYFLAG
))
ext_flags
|=
0x10
;
/* HasNotify2 */
if
(
is_attr
(
func
->
attrs
,
ATTR_NOTIFYFLAG
))
ext_flags
|=
0x10
;
/* HasNotify2 */
if
(
iface
==
type_iface_get_async_iface
(
iface
))
oi2_flags
|=
0x20
;
if
(
iface
==
type_iface_get_async_iface
(
iface
))
oi2_flags
|=
0x20
;
...
@@ -1505,30 +1479,6 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
...
@@ -1505,30 +1479,6 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
print_file
(
file
,
0
,
"/* %u (return value) */
\n
"
,
*
offset
);
print_file
(
file
,
0
,
"/* %u (return value) */
\n
"
,
*
offset
);
*
offset
+=
write_new_procformatstring_type
(
file
,
indent
,
retval
,
TRUE
,
&
stack_offset
);
*
offset
+=
write_new_procformatstring_type
(
file
,
indent
,
retval
,
TRUE
,
&
stack_offset
);
}
}
}
else
/* old style */
{
/* emit argument data */
if
(
args
)
LIST_FOR_EACH_ENTRY
(
var
,
args
,
var_t
,
entry
)
{
print_file
(
file
,
0
,
"/* %u (parameter %s) */
\n
"
,
*
offset
,
var
->
name
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
var
,
FALSE
,
TRUE
);
}
/* emit return value data */
if
(
is_void
(
retval
->
declspec
.
type
))
{
print_file
(
file
,
0
,
"/* %u (void) */
\n
"
,
*
offset
);
print_file
(
file
,
indent
,
"0x5b,
\t
/* FC_END */
\n
"
);
print_file
(
file
,
indent
,
"0x5c,
\t
/* FC_PAD */
\n
"
);
*
offset
+=
2
;
}
else
{
print_file
(
file
,
0
,
"/* %u (return value) */
\n
"
,
*
offset
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
retval
,
TRUE
,
TRUE
);
}
}
}
}
static
void
write_procformatstring_func
(
FILE
*
file
,
int
indent
,
const
type_t
*
iface
,
static
void
write_procformatstring_func
(
FILE
*
file
,
int
indent
,
const
type_t
*
iface
,
...
@@ -1550,7 +1500,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
...
@@ -1550,7 +1500,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
LIST_FOR_EACH_ENTRY
(
var
,
type_function_get_args
(
func
->
declspec
.
type
),
const
var_t
,
entry
)
LIST_FOR_EACH_ENTRY
(
var
,
type_function_get_args
(
func
->
declspec
.
type
),
const
var_t
,
entry
)
{
{
print_file
(
file
,
0
,
"/* %u (parameter %s) */
\n
"
,
*
offset
,
var
->
name
);
print_file
(
file
,
0
,
"/* %u (parameter %s) */
\n
"
,
*
offset
,
var
->
name
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
var
,
FALSE
,
FALSE
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
var
,
FALSE
);
}
}
}
}
...
@@ -1566,7 +1516,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
...
@@ -1566,7 +1516,7 @@ static void write_procformatstring_func( FILE *file, int indent, const type_t *i
else
else
{
{
print_file
(
file
,
0
,
"/* %u (return value) */
\n
"
,
*
offset
);
print_file
(
file
,
0
,
"/* %u (return value) */
\n
"
,
*
offset
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
retval
,
TRUE
,
FALSE
);
*
offset
+=
write_old_procformatstring_type
(
file
,
indent
,
retval
,
TRUE
);
}
}
}
}
...
@@ -2228,7 +2178,7 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
...
@@ -2228,7 +2178,7 @@ static unsigned int write_nonsimple_pointer(FILE *file, const attr_list_t *attrs
if
(
out_attr
&&
!
in_attr
&&
pointer_type
==
FC_RP
)
if
(
out_attr
&&
!
in_attr
&&
pointer_type
==
FC_RP
)
flags
|=
FC_ALLOCED_ON_STACK
;
flags
|=
FC_ALLOCED_ON_STACK
;
}
}
else
if
(
get_stub_mode
()
==
MODE_Oif
)
else
{
{
if
(
context
==
TYPE_CONTEXT_TOPLEVELPARAM
&&
is_ptr
(
type
)
&&
pointer_type
==
FC_RP
)
if
(
context
==
TYPE_CONTEXT_TOPLEVELPARAM
&&
is_ptr
(
type
)
&&
pointer_type
==
FC_RP
)
{
{
...
@@ -2312,7 +2262,7 @@ static unsigned int write_simple_pointer(FILE *file, const attr_list_t *attrs,
...
@@ -2312,7 +2262,7 @@ static unsigned int write_simple_pointer(FILE *file, const attr_list_t *attrs,
if
(
out_attr
&&
!
in_attr
&&
pointer_fc
==
FC_RP
)
if
(
out_attr
&&
!
in_attr
&&
pointer_fc
==
FC_RP
)
flags
|=
FC_ALLOCED_ON_STACK
;
flags
|=
FC_ALLOCED_ON_STACK
;
}
}
else
if
(
get_stub_mode
()
==
MODE_Oif
)
else
{
{
if
(
context
==
TYPE_CONTEXT_TOPLEVELPARAM
&&
fc
==
FC_ENUM16
&&
pointer_fc
==
FC_RP
)
if
(
context
==
TYPE_CONTEXT_TOPLEVELPARAM
&&
fc
==
FC_ENUM16
&&
pointer_fc
==
FC_RP
)
flags
|=
FC_ALLOCED_ON_STACK
;
flags
|=
FC_ALLOCED_ON_STACK
;
...
@@ -5091,7 +5041,7 @@ void write_client_call_routine( FILE *file, const type_t *iface, const var_t *fu
...
@@ -5091,7 +5041,7 @@ void write_client_call_routine( FILE *file, const type_t *iface, const var_t *fu
len
=
fprintf
(
file
,
" %s%s( "
,
len
=
fprintf
(
file
,
" %s%s( "
,
has_ret
?
"_RetVal = "
:
""
,
has_ret
?
"_RetVal = "
:
""
,
get_stub_mode
()
==
MODE_Oif
?
"NdrClientCall2"
:
"NdrClientCall"
);
interpreted_mode
?
"NdrClientCall2"
:
"NdrClientCall"
);
fprintf
(
file
,
"&%s_StubDesc,"
,
prefix
);
fprintf
(
file
,
"&%s_StubDesc,"
,
prefix
);
fprintf
(
file
,
"
\n
%*s&__MIDL_ProcFormatString.Format[%u]"
,
len
,
""
,
proc_offset
);
fprintf
(
file
,
"
\n
%*s&__MIDL_ProcFormatString.Format[%u]"
,
len
,
""
,
proc_offset
);
if
(
needs_params
)
if
(
needs_params
)
...
...
tools/widl/widl.c
View file @
896b4f05
...
@@ -109,9 +109,9 @@ int do_dlldata = 0;
...
@@ -109,9 +109,9 @@ int do_dlldata = 0;
static
int
no_preprocess
=
0
;
static
int
no_preprocess
=
0
;
int
old_names
=
0
;
int
old_names
=
0
;
int
winrt_mode
=
0
;
int
winrt_mode
=
0
;
int
interpreted_mode
=
0
;
int
use_abi_namespace
=
0
;
int
use_abi_namespace
=
0
;
static
int
stdinc
=
1
;
static
int
stdinc
=
1
;
static
enum
stub_mode
stub_mode
=
MODE_Os
;
char
*
input_name
;
char
*
input_name
;
char
*
idl_name
;
char
*
idl_name
;
...
@@ -199,13 +199,6 @@ static const struct long_option long_options[] = {
...
@@ -199,13 +199,6 @@ static const struct long_option long_options[] = {
static
void
rm_tempfile
(
void
);
static
void
rm_tempfile
(
void
);
enum
stub_mode
get_stub_mode
(
void
)
{
/* old-style interpreted stubs are not supported on 64-bit */
if
(
stub_mode
==
MODE_Oi
&&
pointer_size
==
8
)
return
MODE_Oif
;
return
stub_mode
;
}
static
char
*
make_token
(
const
char
*
name
)
static
char
*
make_token
(
const
char
*
name
)
{
{
char
*
token
;
char
*
token
;
...
@@ -595,11 +588,11 @@ static void option_callback( int optc, char *optarg )
...
@@ -595,11 +588,11 @@ static void option_callback( int optc, char *optarg )
output_name
=
xstrdup
(
optarg
);
output_name
=
xstrdup
(
optarg
);
break
;
break
;
case
'O'
:
case
'O'
:
if
(
!
strcmp
(
optarg
,
"s"
))
stub_mode
=
MODE_Os
;
if
(
!
strcmp
(
optarg
,
"s"
))
interpreted_mode
=
0
;
else
if
(
!
strcmp
(
optarg
,
"i"
))
stub_mode
=
MODE_Oi
;
else
if
(
!
strcmp
(
optarg
,
"i"
))
interpreted_mode
=
1
;
else
if
(
!
strcmp
(
optarg
,
"ic"
))
stub_mode
=
MODE_Oif
;
else
if
(
!
strcmp
(
optarg
,
"ic"
))
interpreted_mode
=
1
;
else
if
(
!
strcmp
(
optarg
,
"if"
))
stub_mode
=
MODE_Oif
;
else
if
(
!
strcmp
(
optarg
,
"if"
))
interpreted_mode
=
1
;
else
if
(
!
strcmp
(
optarg
,
"icf"
))
stub_mode
=
MODE_Oif
;
else
if
(
!
strcmp
(
optarg
,
"icf"
))
interpreted_mode
=
1
;
else
error
(
"Invalid argument '-O%s'
\n
"
,
optarg
);
else
error
(
"Invalid argument '-O%s'
\n
"
,
optarg
);
break
;
break
;
case
'p'
:
case
'p'
:
...
...
tools/widl/widl.h
View file @
896b4f05
...
@@ -48,6 +48,7 @@ extern int do_idfile;
...
@@ -48,6 +48,7 @@ extern int do_idfile;
extern
int
do_dlldata
;
extern
int
do_dlldata
;
extern
int
old_names
;
extern
int
old_names
;
extern
int
winrt_mode
;
extern
int
winrt_mode
;
extern
int
interpreted_mode
;
extern
int
use_abi_namespace
;
extern
int
use_abi_namespace
;
extern
char
*
input_name
;
extern
char
*
input_name
;
...
@@ -72,13 +73,6 @@ extern unsigned int packing;
...
@@ -72,13 +73,6 @@ extern unsigned int packing;
extern
unsigned
int
pointer_size
;
extern
unsigned
int
pointer_size
;
extern
time_t
now
;
extern
time_t
now
;
enum
stub_mode
{
MODE_Os
,
/* inline stubs */
MODE_Oi
,
/* old-style interpreted stubs */
MODE_Oif
/* new-style fully interpreted stubs */
};
extern
enum
stub_mode
get_stub_mode
(
void
);
extern
int
open_typelib
(
const
char
*
name
);
extern
int
open_typelib
(
const
char
*
name
);
extern
void
write_header
(
const
statement_list_t
*
stmts
);
extern
void
write_header
(
const
statement_list_t
*
stmts
);
...
...
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