Fixtype of implementation environments.
This is a product type introduced by fty::defprod.
The following invariant is enforced on the fields:
(and (<= short-bytes int-bytes)
(<= int-bytes long-bytes)
(<= long-bytes llong-bytes)
(<= 2 short-bytes)
(<= 2 int-bytes)
(<= 4 long-bytes)
(<= 8 llong-bytes))
We include an indication of the version of C, including whether GCC extensions are enabled or not; see c::version. Currently we mainly support C17, with and without GCC extensions, but we are starting to adding some support for C23 as well.
We assume that bytes are 8 bits,
that signed integers use two's complement,
and that there are no padding bits
or trap representations.
Therefore, the characteristics of the integer types
are defined by four numbers,
i.e. the numbers of bytes of (signed and unsigned)
We also need a flag saying whether the plain
We also need a flag saying whether GCC extensions are enabled or not. This could eventually evolve into a rich set of C versions, similar to the options supported by compilers like GCC.