Add missing interner lang items

This commit is contained in:
Chayim Refael Friedman
2026-04-19 09:33:58 +03:00
parent 333cd70b88
commit 5ec1a727be
4 changed files with 35 additions and 11 deletions
@@ -324,6 +324,7 @@ pub fn from_symbol(symbol: &Symbol) -> Option<Self> {
Drop, sym::drop, TraitId;
Destruct, sym::destruct, TraitId;
BikeshedGuaranteedNoDrop,sym::bikeshed_guaranteed_no_drop, TraitId;
CoerceUnsized, sym::coerce_unsized, TraitId;
DispatchFromDyn, sym::dispatch_from_dyn, TraitId;
@@ -373,6 +374,8 @@ pub fn from_symbol(symbol: &Symbol) -> Option<Self> {
AsyncFn, sym::async_fn, TraitId;
AsyncFnMut, sym::async_fn_mut, TraitId;
AsyncFnOnce, sym::async_fn_once, TraitId;
AsyncFnKindHelper, sym::async_fn_kind_helper,TraitId;
AsyncFnKindUpvars, sym::async_fn_kind_upvars,TypeAliasId;
CallRefFuture, sym::call_ref_future, TypeAliasId;
CallOnceFuture, sym::call_once_future, TypeAliasId;
@@ -489,6 +492,8 @@ pub fn from_symbol(symbol: &Symbol) -> Option<Self> {
IntoIterIntoIter, sym::into_iter, FunctionId;
IteratorNext, sym::next, FunctionId;
Iterator, sym::iterator, TraitId;
FusedIterator, sym::fused_iterator, TraitId;
AsyncIterator, sym::async_iterator, TraitId;
PinNewUnchecked, sym::new_unchecked, FunctionId;
@@ -509,6 +514,10 @@ pub fn from_symbol(symbol: &Symbol) -> Option<Self> {
CStr, sym::CStr, StructId;
Ordering, sym::Ordering, EnumId;
Field, sym::field, TraitId;
FieldBase, sym::field_base, TypeAliasId;
FieldType, sym::field_type, TypeAliasId;
@non_lang_core_traits:
core::default, Default;
core::fmt, Debug;
@@ -1487,7 +1487,7 @@ fn has_target_features(self, _def_id: Self::FunctionId) -> bool {
fn require_lang_item(self, lang_item: SolverLangItem) -> Self::DefId {
let lang_items = self.lang_items();
let lang_item = match lang_item {
SolverLangItem::AsyncFnKindUpvars => unimplemented!(),
SolverLangItem::AsyncFnKindUpvars => lang_items.AsyncFnKindUpvars,
SolverLangItem::AsyncFnOnceOutput => lang_items.AsyncFnOnceOutput,
SolverLangItem::CallOnceFuture => lang_items.CallOnceFuture,
SolverLangItem::CallRefFuture => lang_items.CallRefFuture,
@@ -1498,8 +1498,8 @@ fn require_lang_item(self, lang_item: SolverLangItem) -> Self::DefId {
SolverLangItem::DynMetadata => {
return lang_items.DynMetadata.expect("Lang item required but not found.").into();
}
SolverLangItem::FieldBase => unimplemented!(),
SolverLangItem::FieldType => unimplemented!(),
SolverLangItem::FieldBase => lang_items.FieldBase,
SolverLangItem::FieldType => lang_items.FieldType,
};
lang_item.expect("Lang item required but not found.").into()
}
@@ -1508,13 +1508,13 @@ fn require_trait_lang_item(self, lang_item: SolverTraitLangItem) -> TraitIdWrapp
let lang_items = self.lang_items();
let lang_item = match lang_item {
SolverTraitLangItem::AsyncFn => lang_items.AsyncFn,
SolverTraitLangItem::AsyncFnKindHelper => unimplemented!(),
SolverTraitLangItem::AsyncFnKindHelper => lang_items.AsyncFnKindHelper,
SolverTraitLangItem::AsyncFnMut => lang_items.AsyncFnMut,
SolverTraitLangItem::AsyncFnOnce => lang_items.AsyncFnOnce,
SolverTraitLangItem::AsyncFnOnceOutput => unimplemented!(
"This is incorrectly marked as `SolverTraitLangItem`, and is not used by the solver."
),
SolverTraitLangItem::AsyncIterator => unimplemented!(),
SolverTraitLangItem::AsyncIterator => lang_items.AsyncIterator,
SolverTraitLangItem::Clone => lang_items.Clone,
SolverTraitLangItem::Copy => lang_items.Copy,
SolverTraitLangItem::Coroutine => lang_items.Coroutine,
@@ -1525,7 +1525,7 @@ fn require_trait_lang_item(self, lang_item: SolverTraitLangItem) -> TraitIdWrapp
SolverTraitLangItem::FnMut => lang_items.FnMut,
SolverTraitLangItem::FnOnce => lang_items.FnOnce,
SolverTraitLangItem::FnPtrTrait => lang_items.FnPtrTrait,
SolverTraitLangItem::FusedIterator => unimplemented!(),
SolverTraitLangItem::FusedIterator => lang_items.FusedIterator,
SolverTraitLangItem::Future => lang_items.Future,
SolverTraitLangItem::Iterator => lang_items.Iterator,
SolverTraitLangItem::PointeeTrait => lang_items.PointeeTrait,
@@ -1536,11 +1536,9 @@ fn require_trait_lang_item(self, lang_item: SolverTraitLangItem) -> TraitIdWrapp
SolverTraitLangItem::Tuple => lang_items.Tuple,
SolverTraitLangItem::Unpin => lang_items.Unpin,
SolverTraitLangItem::Unsize => lang_items.Unsize,
SolverTraitLangItem::BikeshedGuaranteedNoDrop => {
unimplemented!()
}
SolverTraitLangItem::BikeshedGuaranteedNoDrop => lang_items.BikeshedGuaranteedNoDrop,
SolverTraitLangItem::TrivialClone => lang_items.TrivialClone,
SolverTraitLangItem::Field => unimplemented!(),
SolverTraitLangItem::Field => lang_items.Field,
};
lang_item.expect("Lang item required but not found.").into()
}
@@ -199,7 +199,9 @@ pub(super) fn prefill() -> DashMap<Symbol, (), BuildHasherDefault<FxHasher>> {
derive,
discriminant_kind,
discriminant_type,
dispatch_from_dyn,destruct,
dispatch_from_dyn,
destruct,
bikeshed_guaranteed_no_drop,
div_assign,
div,
doc,
@@ -232,6 +234,8 @@ pub(super) fn prefill() -> DashMap<Symbol, (), BuildHasherDefault<FxHasher>> {
async_fn_once_output,
async_fn_mut,
async_fn,
async_fn_kind_helper,
async_fn_kind_upvars,
call_ref_future,
call_once_future,
fn_ptr_addr,
@@ -297,6 +301,8 @@ pub(super) fn prefill() -> DashMap<Symbol, (), BuildHasherDefault<FxHasher>> {
iter,
Iterator,
iterator,
fused_iterator,
async_iterator,
keyword,
lang,
lang_items,
@@ -568,4 +574,7 @@ pub(super) fn prefill() -> DashMap<Symbol, (), BuildHasherDefault<FxHasher>> {
contracts_internals,
freeze_impls,
unsized_fn_params,
field,
field_base,
field_type,
}
@@ -936,6 +936,14 @@ extern "rust-call" fn async_call_once(self, args: A) -> Self::CallOnceFuture {
}
}
}
mod internal_implementation_detail {
#[lang = "async_fn_kind_helper"]
trait AsyncFnKindHelper<GoalKind> {
#[lang = "async_fn_kind_upvars"]
type Upvars<'closure_env, Inputs, Upvars, BorrowedUpvarsAsFnPtr>;
}
}
}
pub use self::async_function::{AsyncFn, AsyncFnMut, AsyncFnOnce};
// endregion:async_fn