aboutsummaryrefslogtreecommitdiff
path: root/lib/xixanta/src/assembler.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/xixanta/src/assembler.rs')
-rw-r--r--lib/xixanta/src/assembler.rs33
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.