vyre-libs 0.6.1

vyre Category A library ecosystem - pure-IR compositions over vyre-ops hardware primitives
Documentation
use super::*;

pub(crate) fn parse_param_names(args: &[u8]) -> SmallVec<[&[u8]; 8]> {
    args.split(|byte| *byte == b',')
        .filter_map(|raw| {
            let trimmed = trim_ascii(raw);
            if trimmed.is_empty() || trimmed == b"..." {
                None
            } else if let Some(name) = trimmed.strip_prefix(b"...") {
                Some(name)
            } else {
                Some(trimmed)
            }
        })
        .collect()
}

pub(crate) fn trim_ascii(bytes: &[u8]) -> &[u8] {
    let mut start = 0_usize;
    let mut end = bytes.len();
    while start < end && bytes[start].is_ascii_whitespace() {
        start += 1;
    }
    while end > start && bytes[end - 1].is_ascii_whitespace() {
        end -= 1;
    }
    &bytes[start..end]
}

pub(crate) fn param_argument_span(
    token: &[u8],
    params: &[&[u8]],
    arg_spans: &[(usize, usize)],
) -> Option<(usize, usize)> {
    let idx = params.iter().position(|param| *param == token)?;
    arg_spans.get(idx).copied()
}