Use an array in LanguageItems
This commit is contained in:
parent
f808430497
commit
1e349fb0dd
2 changed files with 13 additions and 13 deletions
|
@ -39,7 +39,7 @@ macro_rules! expand_group {
|
||||||
pub struct LanguageItems {
|
pub struct LanguageItems {
|
||||||
/// Mappings from lang items to their possibly found [`DefId`]s.
|
/// Mappings from lang items to their possibly found [`DefId`]s.
|
||||||
/// The index corresponds to the order in [`LangItem`].
|
/// The index corresponds to the order in [`LangItem`].
|
||||||
items: Vec<Option<DefId>>,
|
items: [Option<DefId>; std::mem::variant_count::<LangItem>()],
|
||||||
/// Lang items that were not found during collection.
|
/// Lang items that were not found during collection.
|
||||||
pub missing: Vec<LangItem>,
|
pub missing: Vec<LangItem>,
|
||||||
/// Mapping from [`LangItemGroup`] discriminants to all
|
/// Mapping from [`LangItemGroup`] discriminants to all
|
||||||
|
@ -48,6 +48,17 @@ pub struct LanguageItems {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LanguageItems {
|
impl LanguageItems {
|
||||||
|
/// Construct an empty collection of lang items and no missing ones.
|
||||||
|
pub fn new() -> Self {
|
||||||
|
const EMPTY: Vec<DefId> = Vec::new();
|
||||||
|
|
||||||
|
Self {
|
||||||
|
items: [None; std::mem::variant_count::<LangItem>()],
|
||||||
|
missing: Vec::new(),
|
||||||
|
groups: [EMPTY; NUM_GROUPS],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get(&self, item: LangItem) -> Option<DefId> {
|
pub fn get(&self, item: LangItem) -> Option<DefId> {
|
||||||
self.items[item as usize]
|
self.items[item as usize]
|
||||||
}
|
}
|
||||||
|
@ -132,18 +143,6 @@ macro_rules! language_item_table {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LanguageItems {
|
impl LanguageItems {
|
||||||
/// Construct an empty collection of lang items and no missing ones.
|
|
||||||
pub fn new() -> Self {
|
|
||||||
fn init_none(_: LangItem) -> Option<DefId> { None }
|
|
||||||
const EMPTY: Vec<DefId> = Vec::new();
|
|
||||||
|
|
||||||
Self {
|
|
||||||
items: vec![$(init_none(LangItem::$variant)),*],
|
|
||||||
missing: Vec::new(),
|
|
||||||
groups: [EMPTY; NUM_GROUPS],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the [`DefId`]s of all lang items in a group.
|
/// Returns the [`DefId`]s of all lang items in a group.
|
||||||
pub fn group(&self, group: LangItemGroup) -> &[DefId] {
|
pub fn group(&self, group: LangItemGroup) -> &[DefId] {
|
||||||
self.groups[group as usize].as_ref()
|
self.groups[group as usize].as_ref()
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#![feature(min_specialization)]
|
#![feature(min_specialization)]
|
||||||
#![feature(never_type)]
|
#![feature(never_type)]
|
||||||
#![feature(rustc_attrs)]
|
#![feature(rustc_attrs)]
|
||||||
|
#![feature(variant_count)]
|
||||||
#![recursion_limit = "256"]
|
#![recursion_limit = "256"]
|
||||||
#![deny(rustc::untranslatable_diagnostic)]
|
#![deny(rustc::untranslatable_diagnostic)]
|
||||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue