vyre-libs 0.6.1

vyre Category A library ecosystem - pure-IR compositions over vyre-ops hardware primitives
Documentation
use crate::parsing::c::preprocess::gpu_pipeline::segments::append_active_segment;

pub(super) fn emit_active_token_range(
    source: &[u8],
    active_segment: &mut Vec<u8>,
    active_segment_start: &mut Option<usize>,
    last_emit_end: &mut usize,
    tok_start: usize,
    tok_end: usize,
) -> Result<(), String> {
    if tok_start > *last_emit_end {
        append_active_segment(
            active_segment,
            active_segment_start,
            source,
            *last_emit_end,
            tok_start,
            "inter-token emission",
        )?;
    }
    if tok_end <= *last_emit_end {
        return Ok(());
    }
    let emit_start = tok_start.max(*last_emit_end);
    append_active_segment(
        active_segment,
        active_segment_start,
        source,
        emit_start,
        tok_end,
        "token emission",
    )?;
    *last_emit_end = tok_end;
    Ok(())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn overlapping_token_rows_emit_source_bytes_once() {
        let source = b"3.14;";
        let mut active_segment = Vec::new();
        let mut active_segment_start = None;
        let mut last_emit_end = 0;

        emit_active_token_range(
            source,
            &mut active_segment,
            &mut active_segment_start,
            &mut last_emit_end,
            0,
            4,
        )
        .expect("Fix: first token span is valid");
        emit_active_token_range(
            source,
            &mut active_segment,
            &mut active_segment_start,
            &mut last_emit_end,
            1,
            4,
        )
        .expect("Fix: overlapping token span is valid");
        emit_active_token_range(
            source,
            &mut active_segment,
            &mut active_segment_start,
            &mut last_emit_end,
            4,
            5,
        )
        .expect("Fix: following token span is valid");

        assert_eq!(active_segment_start, Some(0));
        assert_eq!(active_segment, source);
        assert_eq!(last_emit_end, source.len());
    }
}