From f343a76992e3dd9621d54adc94b2b1dbf5e7fb5d Mon Sep 17 00:00:00 2001 From: light-ly Date: Wed, 25 Sep 2024 00:01:04 +0800 Subject: [PATCH] fix output terminal parse of gate instantation --- src/core/sv_parser.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/sv_parser.rs b/src/core/sv_parser.rs index 87ba0f4..54fe03b 100644 --- a/src/core/sv_parser.rs +++ b/src/core/sv_parser.rs @@ -351,10 +351,17 @@ fn get_first_last_locate(x: &sv_parser::NeedGetLocate) -> Option<(Locate, Locate } } Some(RefNode::OutputTerminal(x)) => { - let id = unwrap_node!(x, Identifier).unwrap(); - let locate = get_identifier(id).unwrap(); - if locate != last_locate { last_locate = locate; } - if first_locate.offset == 0 { first_locate = locate; }; + if let Some(id) = unwrap_node!(x, Identifier) { + let locate = get_identifier(id).unwrap(); + if locate != last_locate { last_locate = locate; } + if first_locate.offset == 0 { first_locate = locate; }; + } else if let Some(RefNode::Expression(x)) = unwrap_node!(x, Expression) { + let exp = sv_parser::NeedParseExpression::Expression(x.clone()); + if let Some(locate) = parse_expression_only_locate(&exp) { + if locate != last_locate { last_locate = locate; } + if first_locate.offset == 0 { first_locate = locate; }; + } + } } _ => () }