use crate::def_id::DefId;
use crate::{lang_items, LangItem, LanguageItems};
-use rustc_ast::ast;
+use rustc_ast as ast;
use rustc_data_structures::fx::FxHashMap;
use rustc_span::symbol::{sym, Symbol};
lazy_static! {
pub static ref WEAK_ITEMS_REFS: FxHashMap<Symbol, LangItem> = {
let mut map = FxHashMap::default();
- $(map.insert(sym::$name, lang_items::$item);)*
+ $(map.insert(sym::$name, LangItem::$item);)*
map
};
}
-pub fn link_name(attrs: &[ast::Attribute]) -> Option<Symbol> {
- lang_items::extract(attrs).and_then(|(name, _)| {
+/// The `check_name` argument avoids the need for `librustc_hir` to depend on
+/// `librustc_session`.
+pub fn link_name<'a, F>(check_name: F, attrs: &'a [ast::Attribute]) -> Option<Symbol>
+where
+ F: Fn(&'a ast::Attribute, Symbol) -> bool
+{
+ lang_items::extract(check_name, attrs).and_then(|(name, _)| {
$(if name == sym::$name {
Some(sym::$sym)
} else)* {
) }
weak_lang_items! {
- panic_impl, PanicImplLangItem, rust_begin_unwind;
- eh_personality, EhPersonalityLangItem, rust_eh_personality;
- oom, OomLangItem, rust_oom;
+ panic_impl, PanicImpl, rust_begin_unwind;
+ eh_personality, EhPersonality, rust_eh_personality;
+ oom, Oom, rust_oom;
}