static void check_scalar(tnf_datum_t datum) { CHECK_DATUM(datum); if (!INFO_SCALAR(DATUM_INFO(datum))) _tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH); /* XXX Need to check for exact scalar type match as well */ }
void _tnf_check_record(tnf_datum_t datum) { CHECK_DATUM(datum); /* All records must be tagged */ if (!INFO_TAGGED(DATUM_INFO(datum))) _tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH); }
void _tnf_check_slots(tnf_datum_t datum) { struct taginfo *info; CHECK_DATUM(datum); info = DATUM_INFO(datum); /* Must be an aggregate */ if (!(INFO_STRUCT(info) || INFO_ARRAY(info))) _tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH); }
static struct slotinfo * get_slotinfo(tnf_datum_t datum) { struct taginfo *info, *base_info; info = DATUM_INFO(datum); base_info = INFO_DERIVED(info)? info->base: info; /* XXX base must not be a scalar tag */ if (INFO_SCALAR(base_info)) _tnf_error(DATUM_TNF(datum), TNF_ERR_BADTNF); return (base_info->slotinfo); }