/// Error handler. Can be used to print error messages; will also retain the
/// current error status.
#[derive(Default, Debug)]
pub struct ErrorHandler {
    had_error: bool,
}

impl ErrorHandler {
    /// Check whether this handler reported an error.
    pub fn had_error(&self) -> bool {
        self.had_error
    }

    /// Report an error.
    pub fn error(&mut self, line: usize, message: &str) {
        self.report(line, "", message)
    }

    fn report(&mut self, line: usize, pos: &str, message: &str) {
        self.had_error = true;
        println!("[line {line}] Error{pos}: {message}")
    }
}