mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 22:54:58 +00:00
Use Symbol in Name
This commit is contained in:
parent
843806b79f
commit
3fe815b0f3
75 changed files with 750 additions and 755 deletions
|
@ -5,7 +5,8 @@
|
|||
|
||||
use chalk_ir::cast::Cast;
|
||||
use hir_def::lang_item::LangItem;
|
||||
use hir_expand::name::name;
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use limit::Limit;
|
||||
use triomphe::Arc;
|
||||
|
||||
|
@ -151,7 +152,8 @@ pub(crate) fn deref_by_trait(
|
|||
|
||||
let deref_trait =
|
||||
db.lang_item(table.trait_env.krate, LangItem::Deref).and_then(|l| l.as_trait())?;
|
||||
let target = db.trait_data(deref_trait).associated_type_by_name(&name![Target])?;
|
||||
let target =
|
||||
db.trait_data(deref_trait).associated_type_by_name(&Name::new_symbol_root(sym::Target))?;
|
||||
|
||||
let projection = {
|
||||
let b = TyBuilder::subst_for_def(db, deref_trait, None);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
use core::ops;
|
||||
use std::{iter, ops::ControlFlow, sync::Arc};
|
||||
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use tracing::debug;
|
||||
|
||||
use chalk_ir::{cast::Caster, fold::shift::Shift, CanonicalVarKinds};
|
||||
|
@ -16,7 +18,6 @@ use hir_def::{
|
|||
AssocItemId, BlockId, CallableDefId, GenericDefId, HasModule, ItemContainerId, Lookup,
|
||||
TypeAliasId, VariantId,
|
||||
};
|
||||
use hir_expand::name::name;
|
||||
|
||||
use crate::{
|
||||
db::{HirDatabase, InternedCoroutine},
|
||||
|
@ -293,8 +294,10 @@ impl chalk_solve::RustIrDatabase<Interner> for ChalkContext<'_> {
|
|||
.lang_item(self.krate, LangItem::Future)
|
||||
.and_then(|item| item.as_trait())
|
||||
.and_then(|trait_| {
|
||||
let alias =
|
||||
self.db.trait_data(trait_).associated_type_by_name(&name![Output])?;
|
||||
let alias = self
|
||||
.db
|
||||
.trait_data(trait_)
|
||||
.associated_type_by_name(&Name::new_symbol_root(sym::Output))?;
|
||||
Some((trait_, alias))
|
||||
})
|
||||
{
|
||||
|
|
|
@ -247,7 +247,7 @@ impl<'a> DeclValidator<'a> {
|
|||
// Check the module name.
|
||||
let Some(module_name) = module_id.name(self.db.upcast()) else { return };
|
||||
let Some(module_name_replacement) =
|
||||
module_name.as_str().and_then(to_lower_snake_case).map(|new_name| Replacement {
|
||||
to_lower_snake_case(module_name.as_str()).map(|new_name| Replacement {
|
||||
current_name: module_name,
|
||||
suggested_text: new_name,
|
||||
expected_case: CaseType::LowerSnakeCase,
|
||||
|
|
|
@ -8,7 +8,7 @@ use either::Either;
|
|||
use hir_def::lang_item::LangItem;
|
||||
use hir_def::{resolver::HasResolver, AdtId, AssocItemId, DefWithBodyId, HasModule};
|
||||
use hir_def::{ItemContainerId, Lookup};
|
||||
use hir_expand::name;
|
||||
use intern::sym;
|
||||
use itertools::Itertools;
|
||||
use rustc_hash::FxHashSet;
|
||||
use rustc_pattern_analysis::constructor::Constructor;
|
||||
|
@ -423,7 +423,7 @@ impl FilterMapNextChecker {
|
|||
ItemContainerId::TraitId(iterator_trait_id) => {
|
||||
let iterator_trait_items = &db.trait_data(iterator_trait_id).items;
|
||||
iterator_trait_items.iter().find_map(|(name, it)| match it {
|
||||
&AssocItemId::FunctionId(id) if *name == name![filter_map] => Some(id),
|
||||
&AssocItemId::FunctionId(id) if *name == sym::filter_map => Some(id),
|
||||
_ => None,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ use hir_def::{
|
|||
ModuleId, TraitId,
|
||||
};
|
||||
use hir_expand::name::Name;
|
||||
use intern::{Internable, Interned};
|
||||
use intern::{sym, Internable, Interned};
|
||||
use itertools::Itertools;
|
||||
use la_arena::ArenaMap;
|
||||
use rustc_apfloat::{
|
||||
|
@ -1171,7 +1171,8 @@ impl HirDisplay for Ty {
|
|||
.lang_item(body.module(db.upcast()).krate(), LangItem::Future)
|
||||
.and_then(LangItemTarget::as_trait);
|
||||
let output = future_trait.and_then(|t| {
|
||||
db.trait_data(t).associated_type_by_name(&hir_expand::name!(Output))
|
||||
db.trait_data(t)
|
||||
.associated_type_by_name(&Name::new_symbol_root(sym::Output))
|
||||
});
|
||||
write!(f, "impl ")?;
|
||||
if let Some(t) = future_trait {
|
||||
|
|
|
@ -46,8 +46,9 @@ use hir_def::{
|
|||
AdtId, AssocItemId, DefWithBodyId, FieldId, FunctionId, ItemContainerId, Lookup, TraitId,
|
||||
TupleFieldId, TupleId, TypeAliasId, VariantId,
|
||||
};
|
||||
use hir_expand::name::{name, Name};
|
||||
use hir_expand::name::Name;
|
||||
use indexmap::IndexSet;
|
||||
use intern::sym;
|
||||
use la_arena::{ArenaMap, Entry};
|
||||
use once_cell::unsync::OnceCell;
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
|
@ -1424,7 +1425,7 @@ impl<'a> InferenceContext<'a> {
|
|||
}
|
||||
|
||||
fn resolve_output_on(&self, trait_: TraitId) -> Option<TypeAliasId> {
|
||||
self.db.trait_data(trait_).associated_type_by_name(&name![Output])
|
||||
self.db.trait_data(trait_).associated_type_by_name(&Name::new_symbol_root(sym::Output))
|
||||
}
|
||||
|
||||
fn resolve_lang_trait(&self, lang: LangItem) -> Option<TraitId> {
|
||||
|
|
|
@ -15,7 +15,8 @@ use hir_def::{
|
|||
resolver::{resolver_for_expr, ResolveValueResult, ValueNs},
|
||||
DefWithBodyId, FieldId, HasModule, TupleFieldId, TupleId, VariantId,
|
||||
};
|
||||
use hir_expand::name;
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use rustc_hash::FxHashMap;
|
||||
use smallvec::SmallVec;
|
||||
use stdx::never;
|
||||
|
@ -268,9 +269,7 @@ impl CapturedItem {
|
|||
}
|
||||
let variant_data = f.parent.variant_data(db.upcast());
|
||||
let field = match &*variant_data {
|
||||
VariantData::Record(fields) => {
|
||||
fields[f.local_id].name.as_str().unwrap_or("[missing field]").to_owned()
|
||||
}
|
||||
VariantData::Record(fields) => fields[f.local_id].name.as_str().to_owned(),
|
||||
VariantData::Tuple(fields) => fields
|
||||
.iter()
|
||||
.position(|it| it.0 == f.local_id)
|
||||
|
@ -621,8 +620,10 @@ impl InferenceContext<'_> {
|
|||
if let Some(deref_trait) =
|
||||
self.resolve_lang_item(LangItem::DerefMut).and_then(|it| it.as_trait())
|
||||
{
|
||||
if let Some(deref_fn) =
|
||||
self.db.trait_data(deref_trait).method_by_name(&name![deref_mut])
|
||||
if let Some(deref_fn) = self
|
||||
.db
|
||||
.trait_data(deref_trait)
|
||||
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
|
||||
{
|
||||
break 'b deref_fn == f;
|
||||
}
|
||||
|
|
|
@ -15,7 +15,8 @@ use hir_def::{
|
|||
path::{GenericArgs, Path},
|
||||
BlockId, FieldId, GenericDefId, GenericParamId, ItemContainerId, Lookup, TupleFieldId, TupleId,
|
||||
};
|
||||
use hir_expand::name::{name, Name};
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use stdx::always;
|
||||
use syntax::ast::RangeOp;
|
||||
|
||||
|
@ -646,8 +647,10 @@ impl InferenceContext<'_> {
|
|||
match op {
|
||||
UnaryOp::Deref => {
|
||||
if let Some(deref_trait) = self.resolve_lang_trait(LangItem::Deref) {
|
||||
if let Some(deref_fn) =
|
||||
self.db.trait_data(deref_trait).method_by_name(&name![deref])
|
||||
if let Some(deref_fn) = self
|
||||
.db
|
||||
.trait_data(deref_trait)
|
||||
.method_by_name(&Name::new_symbol_root(sym::deref))
|
||||
{
|
||||
// FIXME: this is wrong in multiple ways, subst is empty, and we emit it even for builtin deref (note that
|
||||
// the mutability is not wrong, and will be fixed in `self.infer_mut`).
|
||||
|
@ -785,8 +788,10 @@ impl InferenceContext<'_> {
|
|||
// mutability will be fixed up in `InferenceContext::infer_mut`;
|
||||
adj.push(Adjustment::borrow(Mutability::Not, self_ty.clone()));
|
||||
self.write_expr_adj(*base, adj);
|
||||
if let Some(func) =
|
||||
self.db.trait_data(index_trait).method_by_name(&name!(index))
|
||||
if let Some(func) = self
|
||||
.db
|
||||
.trait_data(index_trait)
|
||||
.method_by_name(&Name::new_symbol_root(sym::index))
|
||||
{
|
||||
let substs = TyBuilder::subst_for_def(self.db, index_trait, None)
|
||||
.push(self_ty.clone())
|
||||
|
|
|
@ -6,7 +6,8 @@ use hir_def::{
|
|||
hir::{Array, BinaryOp, BindingAnnotation, Expr, ExprId, PatId, Statement, UnaryOp},
|
||||
lang_item::LangItem,
|
||||
};
|
||||
use hir_expand::name;
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
|
||||
use crate::{lower::lower_to_chalk_mutability, Adjust, Adjustment, AutoBorrow, OverloadedDeref};
|
||||
|
||||
|
@ -108,8 +109,10 @@ impl InferenceContext<'_> {
|
|||
.lang_item(self.table.trait_env.krate, LangItem::IndexMut)
|
||||
.and_then(|l| l.as_trait())
|
||||
{
|
||||
if let Some(index_fn) =
|
||||
self.db.trait_data(index_trait).method_by_name(&name![index_mut])
|
||||
if let Some(index_fn) = self
|
||||
.db
|
||||
.trait_data(index_trait)
|
||||
.method_by_name(&Name::new_symbol_root(sym::index_mut))
|
||||
{
|
||||
*f = index_fn;
|
||||
let base_adjustments = self
|
||||
|
@ -139,8 +142,10 @@ impl InferenceContext<'_> {
|
|||
.lang_item(self.table.trait_env.krate, LangItem::DerefMut)
|
||||
.and_then(|l| l.as_trait())
|
||||
{
|
||||
if let Some(deref_fn) =
|
||||
self.db.trait_data(deref_trait).method_by_name(&name![deref_mut])
|
||||
if let Some(deref_fn) = self
|
||||
.db
|
||||
.trait_data(deref_trait)
|
||||
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
|
||||
{
|
||||
*f = deref_fn;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use hir_def::{
|
|||
AdtId, AssocItemId, GenericDefId, ItemContainerId, Lookup,
|
||||
};
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use stdx::never;
|
||||
|
||||
use crate::{
|
||||
|
@ -227,7 +228,7 @@ impl InferenceContext<'_> {
|
|||
Path::LangItem(..) => (
|
||||
PathSegment {
|
||||
name: {
|
||||
_d = hir_expand::name::known::Unknown;
|
||||
_d = Name::new_symbol_root(sym::Unknown);
|
||||
&_d
|
||||
},
|
||||
args_and_bindings: None,
|
||||
|
|
|
@ -9,7 +9,8 @@ use chalk_ir::{
|
|||
use chalk_solve::infer::ParameterEnaVariableExt;
|
||||
use either::Either;
|
||||
use ena::unify::UnifyKey;
|
||||
use hir_expand::name;
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use rustc_hash::FxHashMap;
|
||||
use smallvec::SmallVec;
|
||||
use triomphe::Arc;
|
||||
|
@ -781,7 +782,8 @@ impl<'a> InferenceTable<'a> {
|
|||
let krate = self.trait_env.krate;
|
||||
let fn_once_trait = FnTrait::FnOnce.get_id(self.db, krate)?;
|
||||
let trait_data = self.db.trait_data(fn_once_trait);
|
||||
let output_assoc_type = trait_data.associated_type_by_name(&name![Output])?;
|
||||
let output_assoc_type =
|
||||
trait_data.associated_type_by_name(&Name::new_symbol_root(sym::Output))?;
|
||||
|
||||
let mut arg_tys = Vec::with_capacity(num_args);
|
||||
let arg_ty = TyBuilder::tuple(num_args)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
use hir_def::{data::adt::StructFlags, lang_item::LangItem, AdtId};
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
|
||||
use crate::db::HirDatabase;
|
||||
|
||||
|
@ -16,48 +17,47 @@ pub fn is_unsafe_cell(db: &dyn HirDatabase, adt: AdtId) -> bool {
|
|||
}
|
||||
|
||||
pub fn lang_items_for_bin_op(op: syntax::ast::BinaryOp) -> Option<(Name, LangItem)> {
|
||||
use hir_expand::name;
|
||||
use syntax::ast::{ArithOp, BinaryOp, CmpOp, Ordering};
|
||||
Some(match op {
|
||||
BinaryOp::LogicOp(_) => return None,
|
||||
BinaryOp::ArithOp(aop) => match aop {
|
||||
ArithOp::Add => (name![add], LangItem::Add),
|
||||
ArithOp::Mul => (name![mul], LangItem::Mul),
|
||||
ArithOp::Sub => (name![sub], LangItem::Sub),
|
||||
ArithOp::Div => (name![div], LangItem::Div),
|
||||
ArithOp::Rem => (name![rem], LangItem::Rem),
|
||||
ArithOp::Shl => (name![shl], LangItem::Shl),
|
||||
ArithOp::Shr => (name![shr], LangItem::Shr),
|
||||
ArithOp::BitXor => (name![bitxor], LangItem::BitXor),
|
||||
ArithOp::BitOr => (name![bitor], LangItem::BitOr),
|
||||
ArithOp::BitAnd => (name![bitand], LangItem::BitAnd),
|
||||
ArithOp::Add => (Name::new_symbol_root(sym::add), LangItem::Add),
|
||||
ArithOp::Mul => (Name::new_symbol_root(sym::mul), LangItem::Mul),
|
||||
ArithOp::Sub => (Name::new_symbol_root(sym::sub), LangItem::Sub),
|
||||
ArithOp::Div => (Name::new_symbol_root(sym::div), LangItem::Div),
|
||||
ArithOp::Rem => (Name::new_symbol_root(sym::rem), LangItem::Rem),
|
||||
ArithOp::Shl => (Name::new_symbol_root(sym::shl), LangItem::Shl),
|
||||
ArithOp::Shr => (Name::new_symbol_root(sym::shr), LangItem::Shr),
|
||||
ArithOp::BitXor => (Name::new_symbol_root(sym::bitxor), LangItem::BitXor),
|
||||
ArithOp::BitOr => (Name::new_symbol_root(sym::bitor), LangItem::BitOr),
|
||||
ArithOp::BitAnd => (Name::new_symbol_root(sym::bitand), LangItem::BitAnd),
|
||||
},
|
||||
BinaryOp::Assignment { op: Some(aop) } => match aop {
|
||||
ArithOp::Add => (name![add_assign], LangItem::AddAssign),
|
||||
ArithOp::Mul => (name![mul_assign], LangItem::MulAssign),
|
||||
ArithOp::Sub => (name![sub_assign], LangItem::SubAssign),
|
||||
ArithOp::Div => (name![div_assign], LangItem::DivAssign),
|
||||
ArithOp::Rem => (name![rem_assign], LangItem::RemAssign),
|
||||
ArithOp::Shl => (name![shl_assign], LangItem::ShlAssign),
|
||||
ArithOp::Shr => (name![shr_assign], LangItem::ShrAssign),
|
||||
ArithOp::BitXor => (name![bitxor_assign], LangItem::BitXorAssign),
|
||||
ArithOp::BitOr => (name![bitor_assign], LangItem::BitOrAssign),
|
||||
ArithOp::BitAnd => (name![bitand_assign], LangItem::BitAndAssign),
|
||||
ArithOp::Add => (Name::new_symbol_root(sym::add_assign), LangItem::AddAssign),
|
||||
ArithOp::Mul => (Name::new_symbol_root(sym::mul_assign), LangItem::MulAssign),
|
||||
ArithOp::Sub => (Name::new_symbol_root(sym::sub_assign), LangItem::SubAssign),
|
||||
ArithOp::Div => (Name::new_symbol_root(sym::div_assign), LangItem::DivAssign),
|
||||
ArithOp::Rem => (Name::new_symbol_root(sym::rem_assign), LangItem::RemAssign),
|
||||
ArithOp::Shl => (Name::new_symbol_root(sym::shl_assign), LangItem::ShlAssign),
|
||||
ArithOp::Shr => (Name::new_symbol_root(sym::shr_assign), LangItem::ShrAssign),
|
||||
ArithOp::BitXor => (Name::new_symbol_root(sym::bitxor_assign), LangItem::BitXorAssign),
|
||||
ArithOp::BitOr => (Name::new_symbol_root(sym::bitor_assign), LangItem::BitOrAssign),
|
||||
ArithOp::BitAnd => (Name::new_symbol_root(sym::bitand_assign), LangItem::BitAndAssign),
|
||||
},
|
||||
BinaryOp::CmpOp(cop) => match cop {
|
||||
CmpOp::Eq { negated: false } => (name![eq], LangItem::PartialEq),
|
||||
CmpOp::Eq { negated: true } => (name![ne], LangItem::PartialEq),
|
||||
CmpOp::Eq { negated: false } => (Name::new_symbol_root(sym::eq), LangItem::PartialEq),
|
||||
CmpOp::Eq { negated: true } => (Name::new_symbol_root(sym::ne), LangItem::PartialEq),
|
||||
CmpOp::Ord { ordering: Ordering::Less, strict: false } => {
|
||||
(name![le], LangItem::PartialOrd)
|
||||
(Name::new_symbol_root(sym::le), LangItem::PartialOrd)
|
||||
}
|
||||
CmpOp::Ord { ordering: Ordering::Less, strict: true } => {
|
||||
(name![lt], LangItem::PartialOrd)
|
||||
(Name::new_symbol_root(sym::lt), LangItem::PartialOrd)
|
||||
}
|
||||
CmpOp::Ord { ordering: Ordering::Greater, strict: false } => {
|
||||
(name![ge], LangItem::PartialOrd)
|
||||
(Name::new_symbol_root(sym::ge), LangItem::PartialOrd)
|
||||
}
|
||||
CmpOp::Ord { ordering: Ordering::Greater, strict: true } => {
|
||||
(name![gt], LangItem::PartialOrd)
|
||||
(Name::new_symbol_root(sym::gt), LangItem::PartialOrd)
|
||||
}
|
||||
},
|
||||
BinaryOp::Assignment { op: None } => return None,
|
||||
|
|
|
@ -61,7 +61,8 @@ use chalk_ir::{
|
|||
};
|
||||
use either::Either;
|
||||
use hir_def::{hir::ExprId, type_ref::Rawness, CallableDefId, GeneralConstId, TypeOrConstParamId};
|
||||
use hir_expand::name;
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use la_arena::{Arena, Idx};
|
||||
use mir::{MirEvalError, VTableMap};
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
|
@ -894,7 +895,9 @@ pub fn callable_sig_from_fn_trait(
|
|||
) -> Option<(FnTrait, CallableSig)> {
|
||||
let krate = trait_env.krate;
|
||||
let fn_once_trait = FnTrait::FnOnce.get_id(db, krate)?;
|
||||
let output_assoc_type = db.trait_data(fn_once_trait).associated_type_by_name(&name![Output])?;
|
||||
let output_assoc_type = db
|
||||
.trait_data(fn_once_trait)
|
||||
.associated_type_by_name(&Name::new_symbol_root(sym::Output))?;
|
||||
|
||||
let mut table = InferenceTable::new(db, trait_env.clone());
|
||||
let b = TyBuilder::trait_ref(db, fn_once_trait);
|
||||
|
|
|
@ -14,8 +14,8 @@ use hir_def::{
|
|||
AdtId, ConstId, DefWithBodyId, EnumVariantId, FunctionId, HasModule, ItemContainerId, Lookup,
|
||||
StaticId, VariantId,
|
||||
};
|
||||
use hir_expand::{mod_path::ModPath, HirFileIdExt, InFile};
|
||||
use intern::Interned;
|
||||
use hir_expand::{mod_path::path, name::Name, HirFileIdExt, InFile};
|
||||
use intern::{sym, Interned};
|
||||
use la_arena::ArenaMap;
|
||||
use rustc_abi::TargetDataLayout;
|
||||
use rustc_apfloat::{
|
||||
|
@ -35,7 +35,7 @@ use crate::{
|
|||
layout::{Layout, LayoutError, RustcEnumVariantIdx},
|
||||
mapping::from_chalk,
|
||||
method_resolution::{is_dyn_method, lookup_impl_const},
|
||||
name, static_lifetime,
|
||||
static_lifetime,
|
||||
traits::FnTrait,
|
||||
utils::{detect_variant_from_bytes, ClosureSubst},
|
||||
CallableDefId, ClosureId, ComplexMemoryMap, Const, ConstScalar, FnDefId, Interner, MemoryMap,
|
||||
|
@ -631,15 +631,19 @@ impl Evaluator<'_> {
|
|||
cached_fn_trait_func: db
|
||||
.lang_item(crate_id, LangItem::Fn)
|
||||
.and_then(|x| x.as_trait())
|
||||
.and_then(|x| db.trait_data(x).method_by_name(&name![call])),
|
||||
.and_then(|x| db.trait_data(x).method_by_name(&Name::new_symbol_root(sym::call))),
|
||||
cached_fn_mut_trait_func: db
|
||||
.lang_item(crate_id, LangItem::FnMut)
|
||||
.and_then(|x| x.as_trait())
|
||||
.and_then(|x| db.trait_data(x).method_by_name(&name![call_mut])),
|
||||
.and_then(|x| {
|
||||
db.trait_data(x).method_by_name(&Name::new_symbol_root(sym::call_mut))
|
||||
}),
|
||||
cached_fn_once_trait_func: db
|
||||
.lang_item(crate_id, LangItem::FnOnce)
|
||||
.and_then(|x| x.as_trait())
|
||||
.and_then(|x| db.trait_data(x).method_by_name(&name![call_once])),
|
||||
.and_then(|x| {
|
||||
db.trait_data(x).method_by_name(&Name::new_symbol_root(sym::call_once))
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -2633,10 +2637,7 @@ impl Evaluator<'_> {
|
|||
let static_data = self.db.static_data(st);
|
||||
let result = if !static_data.is_extern {
|
||||
let konst = self.db.const_eval_static(st).map_err(|e| {
|
||||
MirEvalError::ConstEvalError(
|
||||
static_data.name.as_str().unwrap_or("_").to_owned(),
|
||||
Box::new(e),
|
||||
)
|
||||
MirEvalError::ConstEvalError(static_data.name.as_str().to_owned(), Box::new(e))
|
||||
})?;
|
||||
self.allocate_const_in_heap(locals, &konst)?
|
||||
} else {
|
||||
|
@ -2693,7 +2694,7 @@ impl Evaluator<'_> {
|
|||
) -> Result<()> {
|
||||
let Some(drop_fn) = (|| {
|
||||
let drop_trait = self.db.lang_item(self.crate_id, LangItem::Drop)?.as_trait()?;
|
||||
self.db.trait_data(drop_trait).method_by_name(&name![drop])
|
||||
self.db.trait_data(drop_trait).method_by_name(&Name::new_symbol_root(sym::drop))
|
||||
})() else {
|
||||
// in some tests we don't have drop trait in minicore, and
|
||||
// we can ignore drop in them.
|
||||
|
@ -2797,14 +2798,13 @@ pub fn render_const_using_debug_impl(
|
|||
let resolver = owner.resolver(db.upcast());
|
||||
let Some(TypeNs::TraitId(debug_trait)) = resolver.resolve_path_in_type_ns_fully(
|
||||
db.upcast(),
|
||||
&hir_def::path::Path::from_known_path_with_no_generic(ModPath::from_segments(
|
||||
hir_expand::mod_path::PathKind::Abs,
|
||||
[name![core], name![fmt], name![Debug]],
|
||||
)),
|
||||
&hir_def::path::Path::from_known_path_with_no_generic(path![core::fmt::Debug]),
|
||||
) else {
|
||||
not_supported!("core::fmt::Debug not found");
|
||||
};
|
||||
let Some(debug_fmt_fn) = db.trait_data(debug_trait).method_by_name(&name![fmt]) else {
|
||||
let Some(debug_fmt_fn) =
|
||||
db.trait_data(debug_trait).method_by_name(&Name::new_symbol_root(sym::fmt))
|
||||
else {
|
||||
not_supported!("core::fmt::Debug::fmt not found");
|
||||
};
|
||||
// a1 = &[""]
|
||||
|
@ -2829,10 +2829,7 @@ pub fn render_const_using_debug_impl(
|
|||
evaluator.write_memory(a3.offset(5 * evaluator.ptr_size()), &[1])?;
|
||||
let Some(ValueNs::FunctionId(format_fn)) = resolver.resolve_path_in_value_ns_fully(
|
||||
db.upcast(),
|
||||
&hir_def::path::Path::from_known_path_with_no_generic(ModPath::from_segments(
|
||||
hir_expand::mod_path::PathKind::Abs,
|
||||
[name![std], name![fmt], name![format]],
|
||||
)),
|
||||
&hir_def::path::Path::from_known_path_with_no_generic(path![std::fmt::format]),
|
||||
) else {
|
||||
not_supported!("std::fmt::format not found");
|
||||
};
|
||||
|
|
|
@ -8,12 +8,14 @@ use hir_def::{
|
|||
builtin_type::{BuiltinInt, BuiltinUint},
|
||||
resolver::HasResolver,
|
||||
};
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
|
||||
use crate::{
|
||||
error_lifetime,
|
||||
mir::eval::{
|
||||
name, pad16, Address, AdtId, Arc, BuiltinType, Evaluator, FunctionId, HasModule,
|
||||
HirDisplay, Interned, InternedClosure, Interner, Interval, IntervalAndTy, IntervalOrOwned,
|
||||
pad16, Address, AdtId, Arc, BuiltinType, Evaluator, FunctionId, HasModule, HirDisplay,
|
||||
Interned, InternedClosure, Interner, Interval, IntervalAndTy, IntervalOrOwned,
|
||||
ItemContainerId, LangItem, Layout, Locals, Lookup, MirEvalError, MirSpan, Mutability,
|
||||
Result, Substitution, Ty, TyBuilder, TyExt,
|
||||
},
|
||||
|
@ -64,7 +66,7 @@ impl Evaluator<'_> {
|
|||
};
|
||||
if is_intrinsic {
|
||||
self.exec_intrinsic(
|
||||
function_data.name.as_text().unwrap_or_default().as_str(),
|
||||
function_data.name.as_str(),
|
||||
args,
|
||||
generic_args,
|
||||
destination,
|
||||
|
@ -86,7 +88,7 @@ impl Evaluator<'_> {
|
|||
};
|
||||
if is_platform_intrinsic {
|
||||
self.exec_platform_intrinsic(
|
||||
function_data.name.as_text().unwrap_or_default().as_str(),
|
||||
function_data.name.as_str(),
|
||||
args,
|
||||
generic_args,
|
||||
destination,
|
||||
|
@ -104,7 +106,7 @@ impl Evaluator<'_> {
|
|||
};
|
||||
if is_extern_c {
|
||||
self.exec_extern_c(
|
||||
function_data.name.as_text().unwrap_or_default().as_str(),
|
||||
function_data.name.as_str(),
|
||||
args,
|
||||
generic_args,
|
||||
destination,
|
||||
|
@ -117,7 +119,7 @@ impl Evaluator<'_> {
|
|||
.attrs
|
||||
.iter()
|
||||
.filter_map(|it| it.path().as_ident())
|
||||
.filter_map(|it| it.as_str())
|
||||
.map(|it| it.as_str())
|
||||
.find(|it| {
|
||||
[
|
||||
"rustc_allocator",
|
||||
|
@ -1274,10 +1276,11 @@ impl Evaluator<'_> {
|
|||
args.push(IntervalAndTy::new(addr, field, self, locals)?);
|
||||
}
|
||||
if let Some(target) = self.db.lang_item(self.crate_id, LangItem::FnOnce) {
|
||||
if let Some(def) = target
|
||||
.as_trait()
|
||||
.and_then(|it| self.db.trait_data(it).method_by_name(&name![call_once]))
|
||||
{
|
||||
if let Some(def) = target.as_trait().and_then(|it| {
|
||||
self.db
|
||||
.trait_data(it)
|
||||
.method_by_name(&Name::new_symbol_root(sym::call_once))
|
||||
}) {
|
||||
self.exec_fn_trait(
|
||||
def,
|
||||
&args,
|
||||
|
|
|
@ -1113,9 +1113,9 @@ impl<'ctx> MirLowerCtx<'ctx> {
|
|||
.iter()
|
||||
.map(|it| {
|
||||
let o = match it.1.name.as_str() {
|
||||
Some("start") => lp.take(),
|
||||
Some("end") => rp.take(),
|
||||
Some("exhausted") => {
|
||||
"start" => lp.take(),
|
||||
"end" => rp.take(),
|
||||
"exhausted" => {
|
||||
Some(Operand::from_bytes(Box::new([0]), TyBuilder::bool()))
|
||||
}
|
||||
_ => None,
|
||||
|
|
|
@ -4,7 +4,7 @@ use crate::mir::MutBorrowKind;
|
|||
|
||||
use super::*;
|
||||
use hir_def::FunctionId;
|
||||
use hir_expand::name;
|
||||
use intern::sym;
|
||||
|
||||
macro_rules! not_supported {
|
||||
($it: expr) => {
|
||||
|
@ -192,7 +192,7 @@ impl MirLowerCtx<'_> {
|
|||
if let Some(deref_fn) = self
|
||||
.db
|
||||
.trait_data(deref_trait)
|
||||
.method_by_name(&name![deref_mut])
|
||||
.method_by_name(&Name::new_symbol_root(sym::deref_mut))
|
||||
{
|
||||
break 'b deref_fn == f;
|
||||
}
|
||||
|
@ -324,12 +324,17 @@ impl MirLowerCtx<'_> {
|
|||
mutability: bool,
|
||||
) -> Result<Option<(Place, BasicBlockId)>> {
|
||||
let (chalk_mut, trait_lang_item, trait_method_name, borrow_kind) = if !mutability {
|
||||
(Mutability::Not, LangItem::Deref, name![deref], BorrowKind::Shared)
|
||||
(
|
||||
Mutability::Not,
|
||||
LangItem::Deref,
|
||||
Name::new_symbol_root(sym::deref),
|
||||
BorrowKind::Shared,
|
||||
)
|
||||
} else {
|
||||
(
|
||||
Mutability::Mut,
|
||||
LangItem::DerefMut,
|
||||
name![deref_mut],
|
||||
Name::new_symbol_root(sym::deref_mut),
|
||||
BorrowKind::Mut { kind: MutBorrowKind::Default },
|
||||
)
|
||||
};
|
||||
|
|
|
@ -12,7 +12,8 @@ use hir_def::{
|
|||
lang_item::{LangItem, LangItemTarget},
|
||||
BlockId, TraitId,
|
||||
};
|
||||
use hir_expand::name::{name, Name};
|
||||
use hir_expand::name::Name;
|
||||
use intern::sym;
|
||||
use stdx::panic_context;
|
||||
use triomphe::Arc;
|
||||
|
||||
|
@ -256,9 +257,9 @@ impl FnTrait {
|
|||
|
||||
pub fn method_name(self) -> Name {
|
||||
match self {
|
||||
FnTrait::FnOnce => name!(call_once),
|
||||
FnTrait::FnMut => name!(call_mut),
|
||||
FnTrait::Fn => name!(call),
|
||||
FnTrait::FnOnce => Name::new_symbol_root(sym::call_once),
|
||||
FnTrait::FnMut => Name::new_symbol_root(sym::call_mut),
|
||||
FnTrait::Fn => Name::new_symbol_root(sym::call),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue