Collect attributes during HIR lowering.
This commit is contained in:
parent
d50ca3cbee
commit
1fb257b3b4
9 changed files with 126 additions and 87 deletions
|
@ -2,7 +2,7 @@
|
|||
use crate::def::{CtorKind, DefKind, Namespace, Res};
|
||||
use crate::def_id::DefId;
|
||||
crate use crate::hir_id::HirId;
|
||||
use crate::{itemlikevisit, LangItem};
|
||||
use crate::{itemlikevisit, HirIdVec, LangItem};
|
||||
|
||||
use rustc_ast::util::parser::ExprPrecedence;
|
||||
use rustc_ast::{self as ast, CrateSugar, LlvmAsmDialect};
|
||||
|
@ -675,6 +675,9 @@ pub struct Crate<'hir> {
|
|||
pub proc_macros: Vec<HirId>,
|
||||
|
||||
pub trait_map: BTreeMap<HirId, Vec<TraitCandidate>>,
|
||||
|
||||
/// Collected attributes from HIR nodes.
|
||||
pub attrs: HirIdVec<&'hir [Attribute]>,
|
||||
}
|
||||
|
||||
impl Crate<'hir> {
|
||||
|
|
|
@ -82,6 +82,20 @@ impl<T> HirIdVec<T> {
|
|||
debug_assert_eq!(_ret_id, id.local_id);
|
||||
}
|
||||
|
||||
pub fn push_sparse(&mut self, id: HirId, value: T)
|
||||
where
|
||||
T: Default,
|
||||
{
|
||||
self.map.ensure_contains_elem(id.owner, IndexVec::new);
|
||||
let submap = &mut self.map[id.owner];
|
||||
let i = id.local_id.index();
|
||||
let len = submap.len();
|
||||
if i >= len {
|
||||
submap.extend(std::iter::repeat_with(T::default).take(i - len + 1));
|
||||
}
|
||||
submap[id.local_id] = value;
|
||||
}
|
||||
|
||||
pub fn get(&self, id: HirId) -> Option<&T> {
|
||||
self.map.get(id.owner)?.get(id.local_id)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue