-
Notifications
You must be signed in to change notification settings - Fork 2
Description
We would like to track how various parts of our generated ASTs are created, referencing the C source.
One motivation for this is test generation (#22), which requires generating both C and Haskell code for testing. Generating the C test code from a C Header
is not a good option because we would need to reimplement a lot of the logic for translating from C to Haskell. If the Haskell AST includes C source information, we could traverse the Haskell AST and determine exactly what test functions are required, perhaps referencing the C Header
to get C details.
For example, for a given data
declaration (called Struct
in Hs
and Record
in SHs
), it is useful to know the name of the corresponding C type, including the C namespace. When generating C code, the namespace determines how an identifier is written.
- Ordinary namespace:
foo
struct
tag namespace:struct foo
union
tag namespace:union foo
enum
namespace:enum foo
C source information can also be used to improve the generated Haddock documentation (#26). For example, we could output corresponding C names to help users understand/confirm which Haskell maps to which C.
We should include source locations, which may optionally be output in LINE
pragmas (#74). We could even consider including source location information in generated Haddock documentation.
Related to #23 (which is for the high-level API)