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