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
6ed98b16
Commit
6ed98b16
authored
Nov 25, 2009
by
Rob Shearman
Committed by
Alexandre Julliard
Nov 29, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Detect interfaces that inherit from another interface as objects.
parent
ed26bb09
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
13 additions
and
11 deletions
+13
-11
header.c
tools/widl/header.c
+7
-5
header.h
tools/widl/header.h
+1
-1
parser.y
tools/widl/parser.y
+2
-2
proxy.c
tools/widl/proxy.c
+2
-2
widl.c
tools/widl/widl.c
+1
-1
No files found.
tools/widl/header.c
View file @
6ed98b16
...
@@ -691,10 +691,12 @@ int has_out_arg_or_return(const var_t *func)
...
@@ -691,10 +691,12 @@ int has_out_arg_or_return(const var_t *func)
/********** INTERFACES **********/
/********** INTERFACES **********/
int
is_object
(
const
attr_list_t
*
list
)
int
is_object
(
const
type_t
*
iface
)
{
{
const
attr_t
*
attr
;
const
attr_t
*
attr
;
if
(
list
)
LIST_FOR_EACH_ENTRY
(
attr
,
list
,
const
attr_t
,
entry
)
if
(
type_is_defined
(
iface
)
&&
type_iface_get_inherit
(
iface
))
return
1
;
if
(
iface
->
attrs
)
LIST_FOR_EACH_ENTRY
(
attr
,
iface
->
attrs
,
const
attr_t
,
entry
)
if
(
attr
->
type
==
ATTR_OBJECT
||
attr
->
type
==
ATTR_ODL
)
return
1
;
if
(
attr
->
type
==
ATTR_OBJECT
||
attr
->
type
==
ATTR_ODL
)
return
1
;
return
0
;
return
0
;
}
}
...
@@ -866,7 +868,7 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
...
@@ -866,7 +868,7 @@ static void write_locals(FILE *fp, const type_t *iface, int body)
=
"/* WIDL-generated stub. You must provide an implementation for this. */"
;
=
"/* WIDL-generated stub. You must provide an implementation for this. */"
;
const
statement_t
*
stmt
;
const
statement_t
*
stmt
;
if
(
!
is_object
(
iface
->
attrs
))
if
(
!
is_object
(
iface
))
return
;
return
;
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
))
{
STATEMENTS_FOR_EACH_FUNC
(
stmt
,
type_iface_get_stmts
(
iface
))
{
...
@@ -1180,7 +1182,7 @@ static void write_forward_decls(FILE *header, const statement_list_t *stmts)
...
@@ -1180,7 +1182,7 @@ static void write_forward_decls(FILE *header, const statement_list_t *stmts)
case
STMT_TYPE
:
case
STMT_TYPE
:
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_INTERFACE
)
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_INTERFACE
)
{
{
if
(
is_object
(
stmt
->
u
.
type
->
attrs
)
||
is_attr
(
stmt
->
u
.
type
->
attrs
,
ATTR_DISPINTERFACE
))
if
(
is_object
(
stmt
->
u
.
type
)
||
is_attr
(
stmt
->
u
.
type
->
attrs
,
ATTR_DISPINTERFACE
))
write_forward
(
header
,
stmt
->
u
.
type
);
write_forward
(
header
,
stmt
->
u
.
type
);
}
}
else
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_COCLASS
)
else
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_COCLASS
)
...
@@ -1215,7 +1217,7 @@ static void write_header_stmts(FILE *header, const statement_list_t *stmts, cons
...
@@ -1215,7 +1217,7 @@ static void write_header_stmts(FILE *header, const statement_list_t *stmts, cons
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_INTERFACE
)
if
(
type_get_type
(
stmt
->
u
.
type
)
==
TYPE_INTERFACE
)
{
{
type_t
*
iface
=
stmt
->
u
.
type
;
type_t
*
iface
=
stmt
->
u
.
type
;
if
(
is_attr
(
stmt
->
u
.
type
->
attrs
,
ATTR_DISPINTERFACE
)
||
is_object
(
stmt
->
u
.
type
->
attrs
))
if
(
is_attr
(
stmt
->
u
.
type
->
attrs
,
ATTR_DISPINTERFACE
)
||
is_object
(
stmt
->
u
.
type
))
{
{
write_com_interface_start
(
header
,
iface
);
write_com_interface_start
(
header
,
iface
);
write_header_stmts
(
header
,
type_iface_get_stmts
(
iface
),
stmt
->
u
.
type
,
TRUE
);
write_header_stmts
(
header
,
type_iface_get_stmts
(
iface
),
stmt
->
u
.
type
,
TRUE
);
...
...
tools/widl/header.h
View file @
6ed98b16
...
@@ -38,7 +38,7 @@ extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char
...
@@ -38,7 +38,7 @@ extern void write_type_def_or_decl(FILE *h, type_t *t, int is_field, const char
extern
void
write_type_decl
(
FILE
*
f
,
type_t
*
t
,
const
char
*
name
);
extern
void
write_type_decl
(
FILE
*
f
,
type_t
*
t
,
const
char
*
name
);
extern
void
write_type_decl_left
(
FILE
*
f
,
type_t
*
t
);
extern
void
write_type_decl_left
(
FILE
*
f
,
type_t
*
t
);
extern
int
needs_space_after
(
type_t
*
t
);
extern
int
needs_space_after
(
type_t
*
t
);
extern
int
is_object
(
const
attr_list_t
*
list
);
extern
int
is_object
(
const
type_t
*
iface
);
extern
int
is_local
(
const
attr_list_t
*
list
);
extern
int
is_local
(
const
attr_list_t
*
list
);
extern
int
need_stub
(
const
type_t
*
iface
);
extern
int
need_stub
(
const
type_t
*
iface
);
extern
int
need_proxy
(
const
type_t
*
iface
);
extern
int
need_proxy
(
const
type_t
*
iface
);
...
...
tools/widl/parser.y
View file @
6ed98b16
...
@@ -841,7 +841,7 @@ dispinterfacedef: dispinterfacehdr '{'
...
@@ -841,7 +841,7 @@ dispinterfacedef: dispinterfacehdr '{'
;
;
inherit: { $$ = NULL; }
inherit: { $$ = NULL; }
| ':' aKNOWNTYPE { $$ = find_type_or_error2($2, 0); }
| ':' aKNOWNTYPE { $$ = find_type_or_error2($2, 0);
is_object_interface = 1;
}
;
;
interface: tINTERFACE aIDENTIFIER { $$ = get_type(TYPE_INTERFACE, $2, 0); }
interface: tINTERFACE aIDENTIFIER { $$ = get_type(TYPE_INTERFACE, $2, 0); }
...
@@ -852,9 +852,9 @@ interfacehdr: attributes interface { $$.interface = $2;
...
@@ -852,9 +852,9 @@ interfacehdr: attributes interface { $$.interface = $2;
$$.old_pointer_default = pointer_default;
$$.old_pointer_default = pointer_default;
if (is_attr($1, ATTR_POINTERDEFAULT))
if (is_attr($1, ATTR_POINTERDEFAULT))
pointer_default = get_attrv($1, ATTR_POINTERDEFAULT);
pointer_default = get_attrv($1, ATTR_POINTERDEFAULT);
is_object_interface = is_object($1);
check_def($2);
check_def($2);
$2->attrs = check_iface_attrs($2->name, $1);
$2->attrs = check_iface_attrs($2->name, $1);
is_object_interface = is_object($2);
$2->defined = TRUE;
$2->defined = TRUE;
}
}
;
;
...
...
tools/widl/proxy.c
View file @
6ed98b16
...
@@ -698,12 +698,12 @@ static int does_any_iface(const statement_list_t *stmts, type_pred_t pred)
...
@@ -698,12 +698,12 @@ static int does_any_iface(const statement_list_t *stmts, type_pred_t pred)
int
need_proxy
(
const
type_t
*
iface
)
int
need_proxy
(
const
type_t
*
iface
)
{
{
return
is_object
(
iface
->
attrs
)
&&
!
is_local
(
iface
->
attrs
);
return
is_object
(
iface
)
&&
!
is_local
(
iface
->
attrs
);
}
}
int
need_stub
(
const
type_t
*
iface
)
int
need_stub
(
const
type_t
*
iface
)
{
{
return
!
is_object
(
iface
->
attrs
)
&&
!
is_local
(
iface
->
attrs
);
return
!
is_object
(
iface
)
&&
!
is_local
(
iface
->
attrs
);
}
}
int
need_proxy_file
(
const
statement_list_t
*
stmts
)
int
need_proxy_file
(
const
statement_list_t
*
stmts
)
...
...
tools/widl/widl.c
View file @
6ed98b16
...
@@ -431,7 +431,7 @@ static void write_id_data_stmts(const statement_list_t *stmts)
...
@@ -431,7 +431,7 @@ static void write_id_data_stmts(const statement_list_t *stmts)
if
(
type_get_type
(
type
)
==
TYPE_INTERFACE
)
if
(
type_get_type
(
type
)
==
TYPE_INTERFACE
)
{
{
const
UUID
*
uuid
;
const
UUID
*
uuid
;
if
(
!
is_object
(
type
->
attrs
)
&&
!
is_attr
(
type
->
attrs
,
ATTR_DISPINTERFACE
))
if
(
!
is_object
(
type
)
&&
!
is_attr
(
type
->
attrs
,
ATTR_DISPINTERFACE
))
continue
;
continue
;
uuid
=
get_attrp
(
type
->
attrs
,
ATTR_UUID
);
uuid
=
get_attrp
(
type
->
attrs
,
ATTR_UUID
);
write_guid
(
idfile
,
is_attr
(
type
->
attrs
,
ATTR_DISPINTERFACE
)
?
"DIID"
:
"IID"
,
write_guid
(
idfile
,
is_attr
(
type
->
attrs
,
ATTR_DISPINTERFACE
)
?
"DIID"
:
"IID"
,
...
...
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