From 2455e2bbcfb4372b13a351471a49a585ceb1597c Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Thu, 16 Jan 2025 16:33:10 +0100 Subject: Implement .ifdef/.ifndef statements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They are just synonyms for ".if .defined" and ".if !.defined" respectively. Signed-off-by: Miquel Sabaté Solà --- lib/xixanta/src/parser.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'lib/xixanta/src/parser.rs') diff --git a/lib/xixanta/src/parser.rs b/lib/xixanta/src/parser.rs index 13594e7..50f2af1 100644 --- a/lib/xixanta/src/parser.rs +++ b/lib/xixanta/src/parser.rs @@ -651,14 +651,19 @@ impl Parser { // If this is an .if already, then we can quit, otherwise we must // ensure that the next node is an .if/.elsif and continue the loop. match node.node_type { - NodeType::Control(ControlType::If) => { + NodeType::Control(ControlType::If) + | NodeType::Control(ControlType::IfDef) + | NodeType::Control(ControlType::IfNDef) => { nodes.truncate(nodes.len() - count); return Ok(()); } NodeType::Control(ControlType::Elsif) => { if !matches!( next.node_type, - NodeType::Control(ControlType::If) | NodeType::Control(ControlType::Elsif) + NodeType::Control(ControlType::If) + | NodeType::Control(ControlType::IfDef) + | NodeType::Control(ControlType::IfNDef) + | NodeType::Control(ControlType::Elsif) ) { return Err(self.parser_error("expecting an .if statement").into()); } @@ -666,7 +671,10 @@ impl Parser { NodeType::Control(ControlType::Else) => { if !matches!( next.node_type, - NodeType::Control(ControlType::If) | NodeType::Control(ControlType::Elsif) + NodeType::Control(ControlType::If) + | NodeType::Control(ControlType::IfDef) + | NodeType::Control(ControlType::IfNDef) + | NodeType::Control(ControlType::Elsif) ) { return Err(self.parser_error("expecting an .if statement").into()); } -- cgit v1.2.3