jacob-carlborg / dstep

A tool for converting C and Objective-C headers to D modules
204 stars 37 forks source link

Preprocessor macro with variadic args dropped without warning #257

Open jblachly opened 3 years ago

jblachly commented 3 years ago

The following line:

#define sam_hdr_update_hd(h, ...) sam_hdr_update_line((h), "HD", NULL, NULL, __VA_ARGS__, NULL)

Is dropped silently without warning, I believe due to ... variadic arguments, or __VA_ARGS__ symbol.

No need to deal with variadic macros, but a warning is important so it can be added by hand.

Kind regards

jacob-carlborg commented 3 years ago

It seems the only problem is the variadic arguments, so hopefully it should be easy to fix.

jblachly commented 3 years ago

Off-topic for dstep specifically but when I fixed this by hand it was my first experience with variadic templates in D and I was blown away by compile time sequences.

the fact that I could write

auto sam_hdr_update(T, A...)(T h, A a) {
    sam_hdr_update_line(h, "HD", null, null, a, ull);
}

and it just magically works calling the C variadic fn was really impressive. I even added a static assert to make sure the length of A was an even number at compile time.

jacob-carlborg commented 3 years ago

Yeah, it's pretty awesome.