Suggestion for hsc2hs (structures with commas)

Dimitry Golubovsky golubovsky at gmail.com
Tue Jun 14 10:19:05 EDT 2005


I came across the following issue in hsc2hs:

when requesting a size of a C structure with #size (or similarly this
may apply to #peek, #poke, #offset macros), and the structure is
declared "anonymously", and contains multiple field declaration of the
same type such as:

struct {int ab,cd;}

then #size(struct {int ab,cd;}) will result in

hsc_size(struct {int ab,cd;})

which will fail because of the comma inside the structure makes the
macro recognize 2 arguments instead of 1.

GCC's preprocessor allows variadic macros defined like

#define __quote__(x...) x

If hsc_size is called:

hsc_size(__quote__(struct {int ab,cd;}))

then error does not occur.

Similarly:

hsc_peek(__quote__(struct {int ab,cd;}),cd)

because __quote__ is scanned first, and its result is treated as a
single argument.

I looked through cpp.info, but could not find any other way to quote
macro arguments.

Is it possible to update hsc2hs (Main.hs I believe) to emit macro
calls involving C types in the way described above?

i. e. #size(t) becomes hsc_size(__quote__(t)),
#peek(t,f) becomes hsc_peek(__quote__(t),f) etc.

when hsc2hs generates the C file from a hsc source.

PS I am working with hsc2hs from the GHC 6.2.2 distribution. I
couldn't find such fixes in the changelog since then.

I believe, the person maintaining hsc2hs might be able to implement
these fixes faster than if I tried.

PPS This will work with GCC, but I am not sure abouth other compilers
(like Microsoft C)

-- 
Dimitry Golubovsky

Anywhere on the Web


More information about the Glasgow-haskell-users mailing list