From 621dea18193b05e73296e40341564ab41c80c303 Mon Sep 17 00:00:00 2001 From: light-ly Date: Wed, 25 Dec 2024 21:38:47 +0800 Subject: [PATCH] update vhdl_parser --- src/core/vhdl_parser.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/core/vhdl_parser.rs b/src/core/vhdl_parser.rs index 384c377..9cec9c3 100644 --- a/src/core/vhdl_parser.rs +++ b/src/core/vhdl_parser.rs @@ -34,11 +34,7 @@ pub fn make_fast_from_units( arch_and_entity.iter().for_each(|units| { match units { (Some((arch, arch_tokens)), entity_units) => { - let name = if let Some((entity, _)) = entity_units { - entity.ident.tree.item.name_utf8() - } else { - "".to_string() - }; + let name = arch.entity_name.item.item.name_utf8(); let arch_name = arch.ident.tree.item.name_utf8(); let range = get_range_from_token( arch_tokens.get_token(arch.span().get_start_token()), @@ -47,6 +43,20 @@ pub fn make_fast_from_units( hdlparam.new_vhdl_module(name, arch_name, range); + if let Some((entity, entity_tokens)) = entity_units { + if let Some(param_list) = &entity.generic_clause { + parse_interface_list(param_list, &entity_tokens).iter().for_each(|(name, _, net_type, _, init, range)| { + hdlparam.add_entity_parameter(name, net_type, init, range.clone()); + }); + } + + if let Some(port_list) = &entity.port_clause { + parse_interface_list(port_list, &entity_tokens).iter().for_each(|(name, dir_type, net_type, width, init, range)| { + hdlparam.add_entity_port(name, dir_type, net_type, width, range.clone()); + }); + } + } + let instances = arch.statements.iter().filter(|statement| { match statement.statement.item { ConcurrentStatement::Instance(_) => true,