use crate::*; pub enum SyntacticTokenType { Reference(String), LabelDefinition(String), MacroDefinition(String), MacroTerminator, Pad(u16), Byte(u8), Short(u16), Instruction(u8), Comment, } pub struct SyntacticToken { pub r#type: SyntacticTokenType, pub source_location: SourceLocation, pub error: Option, } impl SyntacticToken { // Call when this token is found inside a macro definition. pub fn use_in_macro_body(&mut self) { match self.r#type { SyntacticTokenType::LabelDefinition(..) | SyntacticTokenType::MacroDefinition(..) => { self.set_error(Error::InvalidTypeInMacroDefinition) } _ => (), }; } pub fn set_error(&mut self, error: Error) { self.error = Some(error); } pub fn is_macro_terminator(&self) -> bool { if let SyntacticTokenType::MacroTerminator = self.r#type {true} else {false} } }