vyre-libs 0.6.2

vyre Category A library ecosystem - pure-IR compositions over vyre-ops hardware primitives
Documentation
use std::path::Path;

use crate::parsing::c::lex::tokens::TOK_PP_ERROR;
use crate::parsing::c::preprocess::gpu_pipeline::conditional_stack::ConditionalFrame;
use crate::parsing::c::preprocess::gpu_pipeline::source_spans::checked_source_range;
use crate::parsing::c::preprocess::gpu_pipeline::tokenization::ClassifiedTokens;

pub(super) fn reject_active_error_directive(
    classified: &ClassifiedTokens,
    file_path: &Path,
    row: usize,
    tok_start: usize,
    tok_end: usize,
) -> Result<(), String> {
    if classified.directive_kinds[row] != TOK_PP_ERROR {
        return Ok(());
    }
    let row_text = String::from_utf8_lossy(checked_source_range(
        &classified.source,
        tok_start,
        tok_end,
        "#error diagnostic",
    )?);
    Err(format!(
        "vyre-libs::gpu_pipeline: active #error directive in {}: {}",
        file_path.display(),
        row_text.trim()
    ))
}

pub(super) fn reject_unterminated_conditionals(
    file_path: &Path,
    conditionals: &[ConditionalFrame],
) -> Result<(), String> {
    if conditionals.is_empty() {
        return Ok(());
    }
    Err(format!(
        "vyre-libs::gpu_pipeline: reached end of {} with {} unterminated conditional block(s). Fix: add the missing #endif directive(s).",
        file_path.display(),
        conditionals.len()
    ))
}