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
edca5937
Commit
edca5937
authored
Mar 21, 2023
by
Rémi Bernon
Committed by
Alexandre Julliard
Mar 23, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Rename (error|warning)_loc_info to (error|warning)_at.
parent
d8d87745
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
87 additions
and
128 deletions
+87
-128
expr.c
tools/widl/expr.c
+26
-36
parser.y
tools/widl/parser.y
+26
-38
typetree.c
tools/widl/typetree.c
+0
-0
typetree.h
tools/widl/typetree.h
+1
-1
utils.c
tools/widl/utils.c
+26
-44
utils.h
tools/widl/utils.h
+4
-4
widltypes.h
tools/widl/widltypes.h
+4
-5
No files found.
tools/widl/expr.c
View file @
edca5937
...
@@ -406,29 +406,25 @@ struct expression_type
...
@@ -406,29 +406,25 @@ struct expression_type
static
void
check_scalar_type
(
const
struct
expr_loc
*
expr_loc
,
static
void
check_scalar_type
(
const
struct
expr_loc
*
expr_loc
,
const
type_t
*
cont_type
,
const
type_t
*
type
)
const
type_t
*
cont_type
,
const
type_t
*
type
)
{
{
if
(
!
cont_type
||
(
!
is_integer_type
(
type
)
&&
!
is_ptr
(
type
)
&&
if
(
!
cont_type
||
(
!
is_integer_type
(
type
)
&&
!
is_ptr
(
type
)
&&
!
is_float_type
(
type
)))
!
is_float_type
(
type
)))
error_at
(
&
expr_loc
->
v
->
where
,
"scalar type required in expression%s%s
\n
"
,
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"scalar type required in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
}
static
void
check_arithmetic_type
(
const
struct
expr_loc
*
expr_loc
,
static
void
check_arithmetic_type
(
const
struct
expr_loc
*
expr_loc
,
const
type_t
*
cont_type
,
const
type_t
*
type
)
const
type_t
*
cont_type
,
const
type_t
*
type
)
{
{
if
(
!
cont_type
||
(
!
is_integer_type
(
type
)
&&
!
is_float_type
(
type
)))
if
(
!
cont_type
||
(
!
is_integer_type
(
type
)
&&
!
is_float_type
(
type
)))
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"arithmetic type required in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"arithmetic type required in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
}
static
void
check_integer_type
(
const
struct
expr_loc
*
expr_loc
,
static
void
check_integer_type
(
const
struct
expr_loc
*
expr_loc
,
const
type_t
*
cont_type
,
const
type_t
*
type
)
const
type_t
*
cont_type
,
const
type_t
*
type
)
{
{
if
(
!
cont_type
||
!
is_integer_type
(
type
))
if
(
!
cont_type
||
!
is_integer_type
(
type
))
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"integer type required in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"integer type required in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
}
static
type_t
*
find_identifier
(
const
char
*
identifier
,
const
type_t
*
cont_type
,
int
*
found_in_cont_type
)
static
type_t
*
find_identifier
(
const
char
*
identifier
,
const
type_t
*
cont_type
,
int
*
found_in_cont_type
)
...
@@ -547,11 +543,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -547,11 +543,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
result
.
is_temporary
=
FALSE
;
result
.
is_temporary
=
FALSE
;
result
.
type
=
find_identifier
(
e
->
u
.
sval
,
cont_type
,
&
found_in_cont_type
);
result
.
type
=
find_identifier
(
e
->
u
.
sval
,
cont_type
,
&
found_in_cont_type
);
if
(
!
result
.
type
)
if
(
!
result
.
type
)
{
error_at
(
&
expr_loc
->
v
->
where
,
"identifier %s cannot be resolved in expression%s%s
\n
"
,
e
->
u
.
sval
,
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"identifier %s cannot be resolved in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
e
->
u
.
sval
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
break
;
break
;
}
}
case
EXPR_LOGNOT
:
case
EXPR_LOGNOT
:
...
@@ -575,9 +568,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -575,9 +568,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
case
EXPR_ADDRESSOF
:
case
EXPR_ADDRESSOF
:
result
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ref
);
result
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ref
);
if
(
!
result
.
is_variable
)
if
(
!
result
.
is_variable
)
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"address-of operator applied to non-variable type in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"address-of operator applied to non-variable type in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
result
.
is_variable
=
FALSE
;
result
.
is_variable
=
FALSE
;
result
.
is_temporary
=
TRUE
;
result
.
is_temporary
=
TRUE
;
result
.
type
=
type_new_pointer
(
result
.
type
);
result
.
type
=
type_new_pointer
(
result
.
type
);
...
@@ -590,9 +582,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -590,9 +582,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
&&
type_array_is_decl_as_ptr
(
result
.
type
))
&&
type_array_is_decl_as_ptr
(
result
.
type
))
result
.
type
=
type_array_get_element_type
(
result
.
type
);
result
.
type
=
type_array_get_element_type
(
result
.
type
);
else
else
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"dereference operator applied to non-pointer type in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"dereference operator applied to non-pointer type in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
break
;
break
;
case
EXPR_CAST
:
case
EXPR_CAST
:
result
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ref
);
result
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ref
);
...
@@ -645,9 +636,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -645,9 +636,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
if
(
result
.
type
&&
is_valid_member_operand
(
result
.
type
))
if
(
result
.
type
&&
is_valid_member_operand
(
result
.
type
))
result
=
resolve_expression
(
expr_loc
,
result
.
type
,
e
->
u
.
ext
);
result
=
resolve_expression
(
expr_loc
,
result
.
type
,
e
->
u
.
ext
);
else
else
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"'.' or '->' operator applied to a type that isn't a structure, union or enumeration in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"'.' or '->' operator applied to a type that isn't a structure, union or enumeration in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
break
;
break
;
case
EXPR_COND
:
case
EXPR_COND
:
{
{
...
@@ -658,8 +648,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -658,8 +648,8 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
result_third
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ext2
);
result_third
=
resolve_expression
(
expr_loc
,
cont_type
,
e
->
ext2
);
check_scalar_type
(
expr_loc
,
cont_type
,
result_second
.
type
);
check_scalar_type
(
expr_loc
,
cont_type
,
result_second
.
type
);
check_scalar_type
(
expr_loc
,
cont_type
,
result_third
.
type
);
check_scalar_type
(
expr_loc
,
cont_type
,
result_third
.
type
);
if
(
!
is_ptr
(
result_second
.
type
)
^
!
is_ptr
(
result_third
.
type
))
if
(
!
is_ptr
(
result_second
.
type
)
^
!
is_ptr
(
result_third
.
type
))
error_
loc_info
(
&
expr_loc
->
v
->
loc_info
,
"type mismatch in ?: expression
\n
"
);
error_
at
(
&
expr_loc
->
v
->
where
,
"type mismatch in ?: expression
\n
"
);
/* FIXME: determine the correct return type */
/* FIXME: determine the correct return type */
result
=
result_second
;
result
=
result_second
;
result
.
is_variable
=
FALSE
;
result
.
is_variable
=
FALSE
;
...
@@ -672,15 +662,15 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
...
@@ -672,15 +662,15 @@ static struct expression_type resolve_expression(const struct expr_loc *expr_loc
struct
expression_type
index_result
;
struct
expression_type
index_result
;
result
.
type
=
type_array_get_element_type
(
result
.
type
);
result
.
type
=
type_array_get_element_type
(
result
.
type
);
index_result
=
resolve_expression
(
expr_loc
,
cont_type
/* FIXME */
,
e
->
u
.
ext
);
index_result
=
resolve_expression
(
expr_loc
,
cont_type
/* FIXME */
,
e
->
u
.
ext
);
if
(
!
index_result
.
type
||
!
is_integer_type
(
index_result
.
type
))
if
(
!
index_result
.
type
||
!
is_integer_type
(
index_result
.
type
))
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"array subscript not of integral type in expression%s%s
\n
"
,
error_at
(
&
expr_loc
->
v
->
where
,
"array subscript not of integral type in expression%s%s
\n
"
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
}
else
else
error_loc_info
(
&
expr_loc
->
v
->
loc_info
,
"array subscript operator applied to non-array type in expression%s%s
\n
"
,
{
expr_loc
->
attr
?
" for attribute "
:
""
,
error_at
(
&
expr_loc
->
v
->
where
,
"array subscript operator applied to non-array type in expression%s%s
\n
"
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
expr_loc
->
attr
?
" for attribute "
:
""
,
expr_loc
->
attr
?
expr_loc
->
attr
:
""
);
}
break
;
break
;
}
}
return
result
;
return
result
;
...
...
tools/widl/parser.y
View file @
edca5937
This diff is collapsed.
Click to expand it.
tools/widl/typetree.c
View file @
edca5937
This diff is collapsed.
Click to expand it.
tools/widl/typetree.h
View file @
edca5937
...
@@ -392,7 +392,7 @@ static inline type_t *type_runtimeclass_get_default_iface(const type_t *type, in
...
@@ -392,7 +392,7 @@ static inline type_t *type_runtimeclass_get_default_iface(const type_t *type, in
return
ref
->
type
;
return
ref
->
type
;
if
(
!
check
)
return
NULL
;
if
(
!
check
)
return
NULL
;
error_
loc_info
(
&
type
->
loc_info
,
"runtimeclass %s needs a default interface
\n
"
,
type
->
name
);
error_
at
(
&
type
->
where
,
"runtimeclass %s needs a default interface
\n
"
,
type
->
name
);
}
}
static
inline
type_t
*
type_delegate_get_iface
(
const
type_t
*
type
)
static
inline
type_t
*
type_delegate_get_iface
(
const
type_t
*
type
)
...
...
tools/widl/utils.c
View file @
edca5937
...
@@ -46,58 +46,39 @@ static void make_print(char *str)
...
@@ -46,58 +46,39 @@ static void make_print(char *str)
}
}
}
}
static
void
generic_msg
(
const
loc_info_t
*
loc_info
,
const
char
*
s
,
const
char
*
t
,
va_list
ap
)
static
void
generic_msg
(
const
struct
location
*
where
,
const
char
*
s
,
const
char
*
t
,
va_list
ap
)
{
{
fprintf
(
stderr
,
"%s:%d: %s: "
,
loc_info
->
input_name
,
loc_info
->
line_number
,
t
);
fprintf
(
stderr
,
"%s:%d: %s: "
,
where
->
input_name
,
where
->
line_number
,
t
);
vfprintf
(
stderr
,
s
,
ap
);
vfprintf
(
stderr
,
s
,
ap
);
if
(
want_near_indication
)
if
(
want_near_indication
)
{
{
char
*
cpy
;
char
*
cpy
;
if
(
loc_info
->
near_text
)
if
(
where
->
near_text
)
{
{
cpy
=
xstrdup
(
loc_info
->
near_text
);
cpy
=
xstrdup
(
where
->
near_text
);
make_print
(
cpy
);
make_print
(
cpy
);
fprintf
(
stderr
,
" near '%s'"
,
cpy
);
fprintf
(
stderr
,
" near '%s'"
,
cpy
);
free
(
cpy
);
free
(
cpy
);
}
}
}
}
}
}
void
error_loc
(
const
char
*
s
,
...)
{
loc_info_t
cur_loc
=
CURRENT_LOCATION
;
va_list
ap
;
va_start
(
ap
,
s
);
generic_msg
(
&
cur_loc
,
s
,
"error"
,
ap
);
va_end
(
ap
);
exit
(
1
);
}
/* yyerror: yacc assumes this is not newline terminated. */
/* yyerror: yacc assumes this is not newline terminated. */
void
parser_error
(
const
char
*
s
)
void
parser_error
(
const
char
*
s
)
{
{
error_loc
(
"%s
\n
"
,
s
);
error_loc
(
"%s
\n
"
,
s
);
}
}
void
error_
loc_info
(
const
loc_info_t
*
loc_info
,
const
char
*
s
,
...
)
void
error_
at
(
const
struct
location
*
where
,
const
char
*
s
,
...
)
{
{
va_list
ap
;
struct
location
cur_loc
=
CURRENT_LOCATION
;
va_start
(
ap
,
s
);
va_list
ap
;
generic_msg
(
loc_info
,
s
,
"error"
,
ap
);
va_start
(
ap
,
s
);
va_end
(
ap
);
generic_msg
(
where
?
where
:
&
cur_loc
,
s
,
"error"
,
ap
);
exit
(
1
);
va_end
(
ap
);
}
exit
(
1
);
int
parser_warning
(
const
char
*
s
,
...)
{
loc_info_t
cur_loc
=
CURRENT_LOCATION
;
va_list
ap
;
va_start
(
ap
,
s
);
generic_msg
(
&
cur_loc
,
s
,
"warning"
,
ap
);
va_end
(
ap
);
return
0
;
}
}
void
error
(
const
char
*
s
,
...)
void
error
(
const
char
*
s
,
...)
...
@@ -119,12 +100,13 @@ void warning(const char *s, ...)
...
@@ -119,12 +100,13 @@ void warning(const char *s, ...)
va_end
(
ap
);
va_end
(
ap
);
}
}
void
warning_
loc_info
(
const
loc_info_t
*
loc_info
,
const
char
*
s
,
...
)
void
warning_
at
(
const
struct
location
*
where
,
const
char
*
s
,
...
)
{
{
va_list
ap
;
struct
location
cur_loc
=
CURRENT_LOCATION
;
va_start
(
ap
,
s
);
va_list
ap
;
generic_msg
(
loc_info
,
s
,
"warning"
,
ap
);
va_start
(
ap
,
s
);
va_end
(
ap
);
generic_msg
(
where
?
where
:
&
cur_loc
,
s
,
"warning"
,
ap
);
va_end
(
ap
);
}
}
void
chat
(
const
char
*
s
,
...)
void
chat
(
const
char
*
s
,
...)
...
...
tools/widl/utils.h
View file @
edca5937
...
@@ -24,12 +24,12 @@
...
@@ -24,12 +24,12 @@
#include "widltypes.h"
#include "widltypes.h"
void
parser_error
(
const
char
*
s
)
__attribute__
((
noreturn
));
void
parser_error
(
const
char
*
s
)
__attribute__
((
noreturn
));
int
parser_warning
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
void
error_loc
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)))
__attribute__
((
noreturn
));
void
error
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)))
__attribute__
((
noreturn
));
void
error
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)))
__attribute__
((
noreturn
));
void
error_loc_info
(
const
loc_info_t
*
,
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
2
,
3
)))
__attribute__
((
noreturn
));
void
error_at
(
const
struct
location
*
,
const
char
*
s
,
...
)
__attribute__
((
format
(
printf
,
2
,
3
)))
__attribute__
((
noreturn
));
#define error_loc( ... ) error_at( NULL, ## __VA_ARGS__ )
void
warning
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
void
warning
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
void
warning_loc_info
(
const
loc_info_t
*
,
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
2
,
3
)));
void
warning_at
(
const
struct
location
*
,
const
char
*
s
,
...
)
__attribute__
((
format
(
printf
,
2
,
3
)));
#define warning_loc( ... ) warning_at( NULL, ## __VA_ARGS__ )
void
chat
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
void
chat
(
const
char
*
s
,
...)
__attribute__
((
format
(
printf
,
1
,
2
)));
size_t
strappend
(
char
**
buf
,
size_t
*
len
,
size_t
pos
,
const
char
*
fmt
,
...)
__attribute__
((
__format__
(
__printf__
,
4
,
5
)));
size_t
strappend
(
char
**
buf
,
size_t
*
len
,
size_t
pos
,
const
char
*
fmt
,
...)
__attribute__
((
__format__
(
__printf__
,
4
,
5
)));
...
...
tools/widl/widltypes.h
View file @
edca5937
...
@@ -37,7 +37,6 @@ struct uuid
...
@@ -37,7 +37,6 @@ struct uuid
#define TRUE 1
#define TRUE 1
#define FALSE 0
#define FALSE 0
typedef
struct
_loc_info_t
loc_info_t
;
typedef
struct
_attr_t
attr_t
;
typedef
struct
_attr_t
attr_t
;
typedef
struct
_attr_custdata_t
attr_custdata_t
;
typedef
struct
_attr_custdata_t
attr_custdata_t
;
typedef
struct
_expr_t
expr_t
;
typedef
struct
_expr_t
expr_t
;
...
@@ -311,7 +310,7 @@ enum type_basic_type
...
@@ -311,7 +310,7 @@ enum type_basic_type
#define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8
#define TYPE_BASIC_INT_MIN TYPE_BASIC_INT8
#define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER
#define TYPE_BASIC_INT_MAX TYPE_BASIC_HYPER
struct
_loc_info_t
struct
location
{
{
const
char
*
input_name
;
const
char
*
input_name
;
int
line_number
;
int
line_number
;
...
@@ -513,7 +512,7 @@ struct _type_t {
...
@@ -513,7 +512,7 @@ struct _type_t {
unsigned
int
typestring_offset
;
unsigned
int
typestring_offset
;
unsigned
int
ptrdesc
;
/* used for complex structs */
unsigned
int
ptrdesc
;
/* used for complex structs */
int
typelib_idx
;
int
typelib_idx
;
loc_info_t
loc_info
;
struct
location
where
;
unsigned
int
ignore
:
1
;
unsigned
int
ignore
:
1
;
unsigned
int
defined
:
1
;
unsigned
int
defined
:
1
;
unsigned
int
written
:
1
;
unsigned
int
written
:
1
;
...
@@ -533,7 +532,7 @@ struct _var_t {
...
@@ -533,7 +532,7 @@ struct _var_t {
/* fields specific to functions */
/* fields specific to functions */
unsigned
int
procstring_offset
,
func_idx
;
unsigned
int
procstring_offset
,
func_idx
;
struct
_loc_info_t
loc_info
;
struct
location
where
;
unsigned
int
declonly
:
1
;
unsigned
int
declonly
:
1
;
...
@@ -654,7 +653,7 @@ type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, in
...
@@ -654,7 +653,7 @@ type_t *reg_type(type_t *type, const char *name, struct namespace *namespace, in
var_t
*
make_var
(
char
*
name
);
var_t
*
make_var
(
char
*
name
);
var_list_t
*
append_var
(
var_list_t
*
list
,
var_t
*
var
);
var_list_t
*
append_var
(
var_list_t
*
list
,
var_t
*
var
);
void
init_loc
_info
(
loc_info_t
*
);
void
init_loc
ation
(
struct
location
*
);
char
*
format_namespace
(
struct
namespace
*
namespace
,
const
char
*
prefix
,
const
char
*
separator
,
const
char
*
suffix
,
char
*
format_namespace
(
struct
namespace
*
namespace
,
const
char
*
prefix
,
const
char
*
separator
,
const
char
*
suffix
,
const
char
*
abi_prefix
);
const
char
*
abi_prefix
);
...
...
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