DESCNAME
#define DEFFNTYPE(DESCNAME, CTYPENAME, ENCFN, DECFN, CHECKFN, FREEFN) \
static const struct fn_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_fn, sizeof(CTYPENAME), &aux_info_##DESCNAME \
#define DEFSEQTYPE(DESCNAME, CTYPENAME, FIELDS) \
static const struct seq_info aux_seqinfo_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_sequence, sizeof(CTYPENAME), &aux_seqinfo_##DESCNAME \
#define DEFBOOLTYPE(DESCNAME, CTYPENAME) \
const struct atype_info k5_atype_##DESCNAME = { \
#define DEFINTTYPE(DESCNAME, CTYPENAME) \
const struct atype_info k5_atype_##DESCNAME = { \
#define DEFUINTTYPE(DESCNAME, CTYPENAME) \
const struct atype_info k5_atype_##DESCNAME = { \
#define DEFINT_IMMEDIATE(DESCNAME, VAL, ERR) \
static const struct immediate_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_int_immediate, 0, &aux_info_##DESCNAME \
#define DEFPTRTYPE(DESCNAME,BASEDESCNAME) \
static const struct ptr_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_ptr, sizeof(aux_type_##DESCNAME), \
&aux_info_##DESCNAME \
#define DEFPTRTYPE(DESCNAME,BASEDESCNAME) \
aux_loadptr_##DESCNAME(const void *p) \
return *(aux_type_##DESCNAME *)p; \
aux_storeptr_##DESCNAME(void *ptr, void *val) \
*(aux_type_##DESCNAME *)val = ptr; \
static const struct ptr_info aux_info_##DESCNAME = { \
aux_loadptr_##DESCNAME, aux_storeptr_##DESCNAME, \
const struct atype_info k5_atype_##DESCNAME = { \
atype_ptr, sizeof(aux_type_##DESCNAME), \
&aux_info_##DESCNAME \
#define DEFOFFSETTYPE(DESCNAME, STYPE, FIELDNAME, BASEDESC) \
static const struct offset_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_offset, sizeof(aux_type_##DESCNAME), \
&aux_info_##DESCNAME \
#define DEFCOUNTEDTYPE_base(DESCNAME, STYPE, DATAFIELD, COUNTFIELD, SIGNED, \
const struct counted_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
&aux_info_##DESCNAME \
#define DEFCOUNTEDTYPE(DESCNAME, STYPE, DATAFIELD, COUNTFIELD, CDESC) \
DEFCOUNTEDTYPE_base(DESCNAME, STYPE, DATAFIELD, COUNTFIELD, 0, CDESC)
#define DEFCOUNTEDTYPE_SIGNED(DESCNAME, STYPE, DATAFIELD, COUNTFIELD, CDESC) \
DEFCOUNTEDTYPE_base(DESCNAME, STYPE, DATAFIELD, COUNTFIELD, 1, CDESC)
#define DEFOPTIONALTYPE(DESCNAME, PRESENT, INIT, BASEDESC) \
static const struct optional_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_optional, sizeof(aux_type_##DESCNAME), \
&aux_info_##DESCNAME \
#define DEFOPTIONALZEROTYPE(DESCNAME, BASEDESC) \
aux_present_##DESCNAME(const void *p) \
DEFOPTIONALTYPE(DESCNAME, aux_present_##DESCNAME, NULL, BASEDESC)
#define DEFOPTIONALEMPTYTYPE(DESCNAME, BASEDESC) \
aux_present_##DESCNAME(const void *p) \
DEFOPTIONALTYPE(DESCNAME, aux_present_##DESCNAME, NULL, BASEDESC)
#define DEFNULLTERMSEQOFTYPE(DESCNAME,BASEDESCNAME) \
const struct atype_info k5_atype_##DESCNAME = { \
atype_nullterm_sequence_of, sizeof(aux_type_##DESCNAME), \
#define DEFNONEMPTYNULLTERMSEQOFTYPE(DESCNAME,BASEDESCNAME) \
const struct atype_info k5_atype_##DESCNAME = { \
sizeof(aux_type_##DESCNAME), \
#define DEFTAGGEDTYPE(DESCNAME, CLASS, CONSTRUCTION, TAG, IMPLICIT, BASEDESC) \
static const struct tagged_info aux_info_##DESCNAME = { \
const struct atype_info k5_atype_##DESCNAME = { \
atype_tagged_thing, sizeof(aux_type_##DESCNAME), \
&aux_info_##DESCNAME \
#define DEFAPPTAGGEDTYPE(DESCNAME, TAG, BASEDESC) \
DEFTAGGEDTYPE(DESCNAME, APPLICATION, CONSTRUCTED, TAG, 0, BASEDESC)
#define DEFCTAGGEDTYPE(DESCNAME, TAG, BASEDESC) \
DEFTAGGEDTYPE(DESCNAME, CONTEXT_SPECIFIC, CONSTRUCTED, TAG, 0, BASEDESC)
#define DEFCTAGGEDTYPE_IMPLICIT(DESCNAME, TAG, BASEDESC) \
DEFTAGGEDTYPE(DESCNAME, CONTEXT_SPECIFIC, CONSTRUCTED, TAG, 1, BASEDESC)
#define DEFCOUNTEDSTRINGTYPE(DESCNAME, DTYPE, LTYPE, ENCFN, DECFN, TAGVAL) \
static const struct string_info aux_info_##DESCNAME = { \
const struct cntype_info k5_cntype_##DESCNAME = { \
cntype_string, &aux_info_##DESCNAME \
#define DEFCOUNTEDDERTYPE(DESCNAME, DTYPE, LTYPE) \
const struct cntype_info k5_cntype_##DESCNAME = { \
#define DEFCOUNTEDSEQOFTYPE(DESCNAME, LTYPE, BASEDESC) \
const struct cntype_info k5_cntype_##DESCNAME = { \
#define DEFCHOICETYPE(DESCNAME, UTYPE, DTYPE, FIELDS) \
static const struct choice_info aux_info_##DESCNAME = { \
const struct cntype_info k5_cntype_##DESCNAME = { \
cntype_choice, &aux_info_##DESCNAME \
#define IMPORT_TYPE(DESCNAME, CTYPENAME) \
extern const struct atype_info k5_atype_##DESCNAME