From 3f1614b8511f8c952fb174dfbb5b346f1c7b792f Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Wed, 25 Feb 2026 22:10:36 +0100 Subject: Raise an error when a control statement does not exist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In this case it was silently letting it go in the hopes that the assembler would catch it, but it's better to just handle it in the parser and give a proper error instead of complicating the assembler a bit more. Signed-off-by: Miquel Sabaté Solà --- lib/xixanta/src/parser.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/xixanta/src/parser.rs b/lib/xixanta/src/parser.rs index e2e31dc..aca5dba 100644 --- a/lib/xixanta/src/parser.rs +++ b/lib/xixanta/src/parser.rs @@ -1582,14 +1582,9 @@ impl Parser { let control = match CONTROL_FUNCTIONS.get(&id.value.to_lowercase()) { Some(control) => control, None => { - return Ok(PNode { - node_type: NodeType::Value, - value: id, - left: None, - right: None, - args: None, - source: self.current_source, - }); + return Err( + self.parser_error(format!("unknown control statement '{}'", id.value).as_str()) + ); } }; @@ -3319,15 +3314,19 @@ inc $20 #[test] fn parse_unknown_control() { let mut parser = Parser::default(); - let err = parser + let mut err = parser .parse(".".as_bytes(), &SourceInfo::default()) .unwrap_err(); assert_eq!(err.first().unwrap().message, "empty identifier"); parser = Parser::default(); - assert!(parser + err = parser .parse(".whatever".as_bytes(), &SourceInfo::default()) - .is_ok()); + .unwrap_err(); + assert_eq!( + err.first().unwrap().message, + "unknown control statement '.whatever'" + ); } // Macro calls. -- cgit v1.2.3