fix vhdl instance type
This commit is contained in:
parent
b09921473f
commit
173388df1b
@ -1,4 +1,5 @@
|
||||
use std::path::PathBuf;
|
||||
use log::info;
|
||||
use vhdl_lang::ast::{ArchitectureBody, ConcurrentStatement, DesignFile, Designator, EntityDeclaration, InstantiatedUnit, InterfaceDeclaration, InterfaceList, LabeledConcurrentStatement, Mode, ModeIndication, Name};
|
||||
use vhdl_lang::{kind_str, HasTokenSpan, Token, TokenAccess, TokenSpan, VHDLParser, VHDLStandard};
|
||||
|
||||
@ -27,6 +28,8 @@ pub fn make_fast_from_units(
|
||||
file_type: "common".to_string()
|
||||
};
|
||||
|
||||
info!("arch and entity {arch_and_entity:#?}");
|
||||
|
||||
arch_and_entity.iter().for_each(|((arch, arch_tokens), (entity, entity_tokens))| {
|
||||
let name = entity.ident.tree.item.name_utf8();
|
||||
let arch_name = arch.ident.tree.item.name_utf8();
|
||||
@ -86,17 +89,20 @@ fn parse_instance(statement: &LabeledConcurrentStatement, tokens: &Vec<Token>) -
|
||||
match &statement.statement.item {
|
||||
ConcurrentStatement::Instance(instance) => {
|
||||
parsed_instance.inst_type = match &instance.unit {
|
||||
InstantiatedUnit::Component(name) => {
|
||||
match &name.item {
|
||||
Name::Designator(designator) => {
|
||||
match &designator.item {
|
||||
Designator::Identifier(symbol) => symbol.name_utf8(),
|
||||
_ => "unknown".to_string()
|
||||
}
|
||||
}
|
||||
_ => "unknown".to_string()
|
||||
}
|
||||
InstantiatedUnit::Component(name) | InstantiatedUnit::Configuration(name) => {
|
||||
parse_instance_name(name)
|
||||
},
|
||||
InstantiatedUnit::Entity(name, arch_name_ref) => {
|
||||
let name = parse_instance_name(name);
|
||||
|
||||
let arch_name = if let Some(arch_name_ref) = arch_name_ref {
|
||||
format!("({})", arch_name_ref.item.item.name_utf8())
|
||||
} else {
|
||||
"".to_string()
|
||||
};
|
||||
|
||||
name + &arch_name
|
||||
}
|
||||
_ => "unknown".to_string()
|
||||
};
|
||||
|
||||
@ -161,6 +167,24 @@ fn parse_instance(statement: &LabeledConcurrentStatement, tokens: &Vec<Token>) -
|
||||
parsed_instance
|
||||
}
|
||||
|
||||
fn parse_instance_name(name: &vhdl_lang::ast::token_range::WithTokenSpan<Name>) -> String {
|
||||
match &name.item {
|
||||
Name::Designator(designator) => {
|
||||
match &designator.item {
|
||||
Designator::Identifier(symbol) => symbol.name_utf8(),
|
||||
_ => "unknown".to_string()
|
||||
}
|
||||
}
|
||||
Name::Selected(_lib_name, designator_token) => {
|
||||
match &designator_token.item.item {
|
||||
Designator::Identifier(symbol) => symbol.name_utf8(),
|
||||
_ => "unknown".to_string()
|
||||
}
|
||||
}
|
||||
_ => "unknown".to_string()
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_interface_list(list: &InterfaceList, tokens: &Vec<Token>) -> Vec<(String, String, String, String, String, Range)> {
|
||||
let mut interface_list = Vec::new();
|
||||
list.items.iter().for_each(|interface| {
|
||||
|
Loading…
x
Reference in New Issue
Block a user