Skip to content

Commit 9f90b32

Browse files
authored
Avoid emitting old-style C declarations (#2443)
* Avoid emiting old-style C declarations * Update Changelog
1 parent 33c9fe4 commit 9f90b32

File tree

3 files changed

+28
-25
lines changed

3 files changed

+28
-25
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@
164164
## Added
165165

166166
## Changed
167-
167+
* Static functions with no arguments use `void` as their single argument
168+
instead of having no arguments when the `--wrap-static-fns` flag is used.
168169
## Removed
169170
* The following deprecated flags were removed: `--use-msvc-mangling`,
170171
`--rustfmt-bindings` and `--size_t-is-usize`.

bindgen-tests/tests/expectations/tests/generated/wrap_static_fns.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
int foo__extern(void) asm("foo__extern");
2-
int foo__extern() { return foo(); }
2+
int foo__extern(void) { return foo(); }
33
int bar__extern(void) asm("bar__extern");
4-
int bar__extern() { return bar(); }
4+
int bar__extern(void) { return bar(); }
55
int takes_ptr__extern(int *arg) asm("takes_ptr__extern");
66
int takes_ptr__extern(int *arg) { return takes_ptr(arg); }
77
int takes_fn_ptr__extern(int (*f) (int)) asm("takes_fn_ptr__extern");

bindgen/codegen/serialize.rs

+24-22
Original file line numberDiff line numberDiff line change
@@ -108,33 +108,13 @@ impl<'a> CSerialize<'a> for Function {
108108
// Write `ret_ty wrap_name(args) asm("wrap_name");`
109109
ret_ty.serialize(ctx, (), stack, writer)?;
110110
write!(writer, " {}(", wrap_name)?;
111-
if args.is_empty() {
112-
write!(writer, "void")?;
113-
} else {
114-
serialize_sep(
115-
", ",
116-
args.iter(),
117-
ctx,
118-
writer,
119-
|(name, type_id), ctx, buf| {
120-
type_id.serialize(ctx, (), &mut vec![name.clone()], buf)
121-
},
122-
)?;
123-
}
111+
serialize_args(&args, ctx, writer)?;
124112
writeln!(writer, ") asm(\"{}\");", wrap_name)?;
125113

126114
// Write `ret_ty wrap_name(args) { return name(arg_names)' }`
127115
ret_ty.serialize(ctx, (), stack, writer)?;
128116
write!(writer, " {}(", wrap_name)?;
129-
serialize_sep(
130-
", ",
131-
args.iter(),
132-
ctx,
133-
writer,
134-
|(name, type_id), _, buf| {
135-
type_id.serialize(ctx, (), &mut vec![name.clone()], buf)
136-
},
137-
)?;
117+
serialize_args(&args, ctx, writer)?;
138118
write!(writer, ") {{ return {}(", name)?;
139119
serialize_sep(", ", args.iter(), ctx, writer, |(name, _), _, buf| {
140120
write!(buf, "{}", name).map_err(From::from)
@@ -338,6 +318,28 @@ impl<'a> CSerialize<'a> for Type {
338318
}
339319
}
340320

321+
fn serialize_args<W: Write>(
322+
args: &[(String, TypeId)],
323+
ctx: &BindgenContext,
324+
writer: &mut W,
325+
) -> Result<(), CodegenError> {
326+
if args.is_empty() {
327+
write!(writer, "void")?;
328+
} else {
329+
serialize_sep(
330+
", ",
331+
args.iter(),
332+
ctx,
333+
writer,
334+
|(name, type_id), ctx, buf| {
335+
type_id.serialize(ctx, (), &mut vec![name.clone()], buf)
336+
},
337+
)?;
338+
}
339+
340+
Ok(())
341+
}
342+
341343
fn serialize_sep<
342344
W: Write,
343345
F: FnMut(I::Item, &BindgenContext, &mut W) -> Result<(), CodegenError>,

0 commit comments

Comments
 (0)