/// The value of an attribute node in an attribute list, e.g. `packed` in `representation packed`.
let Some(domain) = parse_int_domain_ranges(ctx, int_domain, representation.is_some())? else {
fn parse_int_val(ctx: &mut ParseContext, node: Node) -> Result<Option<IntVal>, FatalParseError> {
let Some(index_domain_list) = field!(recover, ctx, matrix_domain, "index_domain_list") else {
// e.g. relation of (int(1..3) * bool), relation (size 2, irreflexive) of (int(0..5) * int(0..5)).
let Some(column_list) = field!(recover, ctx, relation_domain, "relation_domain_list") else {
/// Returns `None` without recording an error when it is something else, so the caller can carry on