Skip to content

Commit 91d4883

Browse files
committed
Add WithDecl and base reference search on EntityId instead of SrcPos
1 parent 4570859 commit 91d4883

40 files changed

+837
-643
lines changed

vhdl_lang/src/analysis.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ mod visibility;
2626
mod tests;
2727

2828
pub use self::root::DesignRoot;
29-
pub use named_entity::NamedEntity;
29+
pub use named_entity::{HasNamedEntity, NamedEntity};

vhdl_lang/src/analysis/analyze.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
//
55
// Copyright (c) 2019, Olof Kraigher olof.kraigher@gmail.com
66

7+
use super::named_entity::HasNamedEntity;
78
use super::region::*;
89
use super::root::*;
910
use crate::ast::*;
1011
use crate::data::*;
1112
use fnv::FnvHashSet;
1213
use std::cell::RefCell;
14+
use std::ops::Deref;
1315
use std::sync::Arc;
1416

1517
pub enum AnalysisError {
@@ -167,10 +169,11 @@ impl<'a> AnalyzeContext<'a> {
167169
match unit.kind() {
168170
AnyKind::Primary(..) => {
169171
let data = self.get_analysis(Some(use_pos), unit)?;
170-
region.make_potentially_visible(
171-
Some(use_pos),
172-
data.result().ent.clone().unwrap(),
173-
);
172+
if let AnyDesignUnit::Primary(primary) = data.deref() {
173+
if let Some(ent) = primary.named_entity() {
174+
region.make_potentially_visible(Some(use_pos), ent.clone());
175+
}
176+
}
174177
}
175178
AnyKind::Secondary(..) => {}
176179
}
@@ -284,7 +287,11 @@ impl<'a> AnalyzeContext<'a> {
284287
if let Designator::Identifier(ref primary_name) = primary_name {
285288
if let Some(unit) = self.get_primary_unit(library_name, primary_name) {
286289
let data = self.get_analysis(Some(pos), unit)?;
287-
return Ok(data.result().ent.clone().unwrap());
290+
if let AnyDesignUnit::Primary(primary) = data.deref() {
291+
if let Some(ent) = primary.named_entity() {
292+
return Ok(ent.clone());
293+
}
294+
}
288295
}
289296
}
290297

vhdl_lang/src/analysis/concurrent.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ impl<'a> AnalyzeContext<'a> {
3434
statement: &mut LabeledConcurrentStatement,
3535
diagnostics: &mut dyn DiagnosticHandler,
3636
) -> FatalNullResult {
37-
if let Some(ref label) = statement.label {
38-
parent.add(label.clone(), NamedEntityKind::Label, diagnostics);
37+
if let Some(ref mut label) = statement.label {
38+
parent.add(label.define(NamedEntityKind::Label), diagnostics);
3939
}
4040

4141
match statement.statement {
@@ -89,8 +89,7 @@ impl<'a> AnalyzeContext<'a> {
8989
self.analyze_discrete_range(parent, discrete_range, diagnostics)?;
9090
let mut region = parent.nested();
9191
region.add(
92-
index_name.clone(),
93-
NamedEntityKind::LoopParameter,
92+
index_name.define(NamedEntityKind::LoopParameter),
9493
diagnostics,
9594
);
9695
self.analyze_generate_body(&mut region, body, diagnostics)?;
@@ -169,7 +168,7 @@ impl<'a> AnalyzeContext<'a> {
169168
statements,
170169
} = body;
171170
if let Some(label) = alternative_label {
172-
region.add(label.clone(), NamedEntityKind::Label, diagnostics);
171+
region.add(label.define(NamedEntityKind::Label), diagnostics);
173172
}
174173
if let Some(ref mut decl) = decl {
175174
self.analyze_declarative_part(region, decl, diagnostics)?;

0 commit comments

Comments
 (0)