Cleanup weak lang items
This commit is contained in:
parent
1e349fb0dd
commit
6621279a75
6 changed files with 38 additions and 63 deletions
|
@ -5,7 +5,6 @@
|
|||
#![feature(associated_type_defaults)]
|
||||
#![feature(closure_track_caller)]
|
||||
#![feature(const_btree_len)]
|
||||
#![feature(once_cell)]
|
||||
#![feature(min_specialization)]
|
||||
#![feature(never_type)]
|
||||
#![feature(rustc_attrs)]
|
||||
|
|
|
@ -1,53 +1,31 @@
|
|||
//! Validity checking for weak lang items
|
||||
|
||||
use crate::def_id::DefId;
|
||||
use crate::{lang_items, LangItem, LanguageItems};
|
||||
use crate::LangItem;
|
||||
|
||||
use rustc_ast as ast;
|
||||
use rustc_data_structures::fx::FxIndexMap;
|
||||
use rustc_span::symbol::{sym, Symbol};
|
||||
|
||||
use std::sync::LazyLock;
|
||||
|
||||
macro_rules! weak_lang_items {
|
||||
($($name:ident, $item:ident, $sym:ident;)*) => (
|
||||
($($item:ident, $sym:ident;)*) => {
|
||||
pub static WEAK_LANG_ITEMS: &[LangItem] = &[$(LangItem::$item,)*];
|
||||
|
||||
pub static WEAK_ITEMS_REFS: LazyLock<FxIndexMap<Symbol, LangItem>> = LazyLock::new(|| {
|
||||
let mut map = FxIndexMap::default();
|
||||
$(map.insert(sym::$name, LangItem::$item);)*
|
||||
map
|
||||
});
|
||||
impl LangItem {
|
||||
pub fn is_weak(self) -> bool {
|
||||
matches!(self, $(LangItem::$item)|*)
|
||||
}
|
||||
|
||||
pub static WEAK_ITEMS_SYMBOLS: LazyLock<FxIndexMap<LangItem, Symbol>> = LazyLock::new(|| {
|
||||
let mut map = FxIndexMap::default();
|
||||
$(map.insert(LangItem::$item, sym::$sym);)*
|
||||
map
|
||||
});
|
||||
|
||||
pub fn link_name(attrs: &[ast::Attribute]) -> Option<Symbol>
|
||||
{
|
||||
lang_items::extract(attrs).and_then(|(name, _)| {
|
||||
$(if name == sym::$name {
|
||||
Some(sym::$sym)
|
||||
} else)* {
|
||||
None
|
||||
pub fn link_name(self) -> Option<Symbol> {
|
||||
match self {
|
||||
$( LangItem::$item => Some(sym::$sym),)*
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
impl LanguageItems {
|
||||
pub fn is_weak_lang_item(&self, item_def_id: DefId) -> bool {
|
||||
let did = Some(item_def_id);
|
||||
|
||||
$(self.$name() == did)||*
|
||||
}
|
||||
}
|
||||
|
||||
) }
|
||||
|
||||
weak_lang_items! {
|
||||
panic_impl, PanicImpl, rust_begin_unwind;
|
||||
eh_personality, EhPersonality, rust_eh_personality;
|
||||
eh_catch_typeinfo, EhCatchTypeinfo, rust_eh_catch_typeinfo;
|
||||
oom, Oom, rust_oom;
|
||||
PanicImpl, rust_begin_unwind;
|
||||
EhPersonality, rust_eh_personality;
|
||||
EhCatchTypeinfo, rust_eh_catch_typeinfo;
|
||||
Oom, rust_oom;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue