use crate::types::{ErrorLocationProvider, SourceLocation};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Token {
pub text: String,
pub loc: Option<SourceLocation>,
pub noexpand: Option<bool>,
pub treat_as_relax: Option<bool>,
}
impl Token {
#[must_use]
pub const fn new(text: String, loc: Option<SourceLocation>) -> Self {
Self {
text,
loc,
noexpand: None,
treat_as_relax: None,
}
}
#[must_use]
pub fn range(self, end_token: Self, text: String) -> Option<Self> {
let loc = SourceLocation::range(self.loc, end_token.loc)?;
Some(Self {
text,
loc: Some(loc),
noexpand: None,
treat_as_relax: None,
})
}
}
impl ErrorLocationProvider for Token {
fn loc(&self) -> Option<&SourceLocation> {
self.loc.as_ref()
}
}
impl ErrorLocationProvider for Option<Token> {
fn loc(&self) -> Option<&SourceLocation> {
let t = self.as_ref()?;
t.loc.as_ref()
}
}