diff options
Diffstat (limited to 'lib/xixanta/src/assembler.rs')
| -rw-r--r-- | lib/xixanta/src/assembler.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/xixanta/src/assembler.rs b/lib/xixanta/src/assembler.rs index cf11de1..646b072 100644 --- a/lib/xixanta/src/assembler.rs +++ b/lib/xixanta/src/assembler.rs @@ -2385,6 +2385,7 @@ impl<'a> Assembler<'a> { NodeType::Control(ControlType::Hibyte) => self.evaluate_byte(node, true), NodeType::Control(ControlType::Lobyte) => self.evaluate_byte(node, false), NodeType::Control(ControlType::Defined) => self.evaluate_defined(node), + NodeType::Control(ControlType::Version) => self.evaluate_version(node), _ => Err(Error { line: node.value.line, message: format!( @@ -2421,6 +2422,38 @@ impl<'a> Assembler<'a> { Ok(bundle) } + // Returns a bundle which is just the version from this library. + fn evaluate_version(&mut self, node: &PNode) -> Result<Bundle, Error> { + let Ok(major) = env!("CARGO_PKG_VERSION_MAJOR").parse::<u8>() else { + return Err(Error { + line: node.value.line, + message: "bad version number".to_string(), + source: self.source_for(node), + expanded_from: self.macro_context.clone(), + global: false, + }); + }; + let Ok(minor) = env!("CARGO_PKG_VERSION_MINOR").parse::<u8>() else { + return Err(Error { + line: node.value.line, + message: "bad version number".to_string(), + source: self.source_for(node), + expanded_from: self.macro_context.clone(), + global: false, + }); + }; + + Ok(Bundle { + bytes: [minor, major, 0x00], + size: 2, + address: 0, + cycles: 0, + affected_on_page: false, + resolved: true, + negative: false, + }) + } + // Returns a bundle containing a boolean value on whether the symbol // referenced in the given `node` is actually defined on this context or // not. |
