summaryrefslogtreecommitdiff
path: root/src/syntactic_token.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/syntactic_token.rs')
-rw-r--r--src/syntactic_token.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/syntactic_token.rs b/src/syntactic_token.rs
new file mode 100644
index 0000000..ee473e2
--- /dev/null
+++ b/src/syntactic_token.rs
@@ -0,0 +1,43 @@
+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<Error>,
+}
+
+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}
+ }
+}