attributes
KDLScript Attributes start with @
and apply to the next item (function or type) that follows them. There are currently 3 major classes of attributes:
- repr attrs
- lang reprs
@repr "rust"
- use rust's native struct layout@repr "c"
- use C-compatible struct layout
- primitive reprs - for any enums, use the given primitive as its type
@repr "u8"
@repr "f32"
- ...
- transparent repr - equivalent of rust's
repr(transparent)
@repr "transparent"
- lang reprs
- modifier attrs
@align 16
- align to N@packed
- pack fields to eliminate padding
- passthrough attrs
@ "literally anything here"
The significance of repr attributes is that providing any explicit repr
attribute is considered an opt-out from the default automatic repr all user-defined types receive.
When we generate tests we will typically generate both a repr(rust)
version and a repr(C)
version. In these versions any user-defined type gets (an equivalent of) those attributes applied to it.
This means that applying @align 16
still leaves a struct eligible to have the rust layout and c layout tested, while applying @repr "u8"
to a tagged union does not (if you want to test repr(C, u8)
, you need to set @repr "C" "u8"
).