Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/hir-def/src/db.rs | 14 | ||||
| -rw-r--r-- | crates/hir-def/src/lib.rs | 58 | ||||
| -rw-r--r-- | crates/hir-ty/src/consteval.rs | 5 | ||||
| -rw-r--r-- | crates/hir-ty/src/db.rs | 55 | ||||
| -rw-r--r-- | crates/hir-ty/src/lower.rs | 6 | ||||
| -rw-r--r-- | crates/hir-ty/src/mir/eval.rs | 10 | ||||
| -rw-r--r-- | crates/hir-ty/src/mir/lower.rs | 6 | ||||
| -rw-r--r-- | crates/hir-ty/src/next_solver/def_id.rs | 9 | ||||
| -rw-r--r-- | crates/hir-ty/src/next_solver/solver.rs | 3 |
9 files changed, 81 insertions, 85 deletions
diff --git a/crates/hir-def/src/db.rs b/crates/hir-def/src/db.rs index d644c1e9fe..d9be96174e 100644 --- a/crates/hir-def/src/db.rs +++ b/crates/hir-def/src/db.rs @@ -7,12 +7,11 @@ use hir_expand::{ use triomphe::Arc; use crate::{ - AnonConstId, AnonConstLoc, AssocItemId, AttrDefId, BlockId, BlockLoc, ConstId, ConstLoc, - EnumId, EnumLoc, EnumVariantId, EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId, - ExternCrateLoc, FunctionId, FunctionLoc, ImplId, ImplLoc, Macro2Id, Macro2Loc, MacroExpander, - MacroId, MacroRulesId, MacroRulesLoc, MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId, - StaticLoc, StructId, StructLoc, TraitId, TraitLoc, TypeAliasId, TypeAliasLoc, UnionId, - UnionLoc, UseId, UseLoc, + AssocItemId, AttrDefId, BlockId, BlockLoc, ConstId, ConstLoc, EnumId, EnumLoc, EnumVariantId, + EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId, ExternCrateLoc, FunctionId, + FunctionLoc, ImplId, ImplLoc, Macro2Id, Macro2Loc, MacroExpander, MacroId, MacroRulesId, + MacroRulesLoc, MacroRulesLocFlags, ProcMacroId, ProcMacroLoc, StaticId, StaticLoc, StructId, + StructLoc, TraitId, TraitLoc, TypeAliasId, TypeAliasLoc, UnionId, UnionLoc, UseId, UseLoc, attrs::AttrFlags, item_tree::{ItemTree, file_item_tree}, nameres::crate_def_map, @@ -52,9 +51,6 @@ pub trait InternDatabase: SourceDatabase { fn intern_static(&self, loc: StaticLoc) -> StaticId; #[salsa::interned] - fn intern_anon_const(&self, loc: AnonConstLoc) -> AnonConstId; - - #[salsa::interned] fn intern_trait(&self, loc: TraitLoc) -> TraitId; #[salsa::interned] diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs index 2c7685b189..36afd8f8a5 100644 --- a/crates/hir-def/src/lib.rs +++ b/crates/hir-def/src/lib.rs @@ -86,19 +86,14 @@ use crate::{ builtin_type::BuiltinType, db::DefDatabase, expr_store::ExpressionStoreSourceMap, - hir::{ - ExprId, - generics::{GenericParams, LocalLifetimeParamId, LocalTypeOrConstParamId}, - }, + hir::generics::{GenericParams, LocalLifetimeParamId, LocalTypeOrConstParamId}, nameres::{ LocalDefMap, assoc::{ImplItems, TraitItems}, block_def_map, crate_def_map, crate_local_def_map, diagnostics::DefDiagnostics, }, - signatures::{ - ConstSignature, EnumVariants, InactiveEnumVariantCode, StaticSignature, VariantFields, - }, + signatures::{EnumVariants, InactiveEnumVariantCode, VariantFields}, }; type FxIndexMap<K, V> = indexmap::IndexMap<K, V, rustc_hash::FxBuildHasher>; @@ -313,19 +308,6 @@ impl_intern!(ConstId, ConstLoc, intern_const, lookup_intern_const); pub type StaticLoc = AssocItemLoc<ast::Static>; impl_intern!(StaticId, StaticLoc, intern_static, lookup_intern_static); -/// An anonymous const expression that appears in a type position (e.g., array lengths, -/// const generic arguments like `{ N + 1 }`). Unlike named constants, these don't have -/// their own `Body` — their expressions live in the parent's signature `ExpressionStore`. -#[derive(Debug, Hash, PartialEq, Eq, Clone)] -pub struct AnonConstLoc { - /// The owner store containing this expression. - pub owner: ExpressionStoreOwnerId, - /// The ExprId within the owner's ExpressionStore that is the root - /// of this anonymous const expression. - pub expr: ExprId, -} -impl_intern!(AnonConstId, AnonConstLoc, intern_anon_const, lookup_intern_anon_const); - pub type TraitLoc = ItemLoc<ast::Trait>; impl_intern!(TraitId, TraitLoc, intern_trait, lookup_intern_trait); @@ -721,42 +703,6 @@ impl From<DefWithBodyId> for ModuleDefId { } } -/// A constant, which might appears as a const item, an anonymous const block in expressions -/// or patterns, or as a constant in types with const generics. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)] -pub enum GeneralConstId { - ConstId(ConstId), - StaticId(StaticId), - AnonConstId(AnonConstId), -} - -impl_from!(ConstId, StaticId, AnonConstId for GeneralConstId); - -impl GeneralConstId { - pub fn generic_def(self, db: &dyn DefDatabase) -> Option<GenericDefId> { - match self { - GeneralConstId::ConstId(it) => Some(it.into()), - GeneralConstId::StaticId(it) => Some(it.into()), - GeneralConstId::AnonConstId(it) => Some(it.lookup(db).owner.generic_def(db)), - } - } - - pub fn name(self, db: &dyn DefDatabase) -> String { - match self { - GeneralConstId::StaticId(it) => { - StaticSignature::of(db, it).name.display(db, Edition::CURRENT).to_string() - } - GeneralConstId::ConstId(const_id) => { - ConstSignature::of(db, const_id).name.as_ref().map_or_else( - || "_".to_owned(), - |name| name.display(db, Edition::CURRENT).to_string(), - ) - } - GeneralConstId::AnonConstId(_) => "{anon const}".to_owned(), - } - } -} - /// The defs which have a body. #[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)] pub enum DefWithBodyId { diff --git a/crates/hir-ty/src/consteval.rs b/crates/hir-ty/src/consteval.rs index 0fdd3ff1d9..9e2040ce37 100644 --- a/crates/hir-ty/src/consteval.rs +++ b/crates/hir-ty/src/consteval.rs @@ -5,8 +5,7 @@ mod tests; use base_db::Crate; use hir_def::{ - ConstId, EnumVariantId, ExpressionStoreOwnerId, GeneralConstId, GenericDefId, HasModule, - StaticId, + ConstId, EnumVariantId, ExpressionStoreOwnerId, GenericDefId, HasModule, StaticId, attrs::AttrFlags, expr_store::{Body, ExpressionStore}, hir::{Expr, ExprId, Literal}, @@ -19,7 +18,7 @@ use stdx::never; use crate::{ LifetimeElisionKind, ParamEnvAndCrate, TyLoweringContext, - db::HirDatabase, + db::{GeneralConstId, HirDatabase}, display::DisplayTarget, infer::InferenceContext, mir::{MirEvalError, MirLowerError, pad16}, diff --git a/crates/hir-ty/src/db.rs b/crates/hir-ty/src/db.rs index 5dba53a761..bf209392f0 100644 --- a/crates/hir-ty/src/db.rs +++ b/crates/hir-ty/src/db.rs @@ -1,7 +1,7 @@ //! The home of `HirDatabase`, which is the Salsa database containing all the //! type inference-related queries. -use base_db::{Crate, target::TargetLoadError}; +use base_db::{Crate, impl_intern_key, target::TargetLoadError}; use either::Either; use hir_def::{ AdtId, BuiltinDeriveImplId, CallableDefId, ConstId, ConstParamId, DefWithBodyId, EnumVariantId, @@ -12,9 +12,12 @@ use hir_def::{ expr_store::ExpressionStore, hir::{ClosureKind, ExprId}, layout::TargetDataLayout, + signatures::{ConstSignature, StaticSignature}, }; use la_arena::ArenaMap; use salsa::plumbing::AsId; +use span::Edition; +use stdx::impl_from; use triomphe::Arc; use crate::{ @@ -337,3 +340,53 @@ impl InternedCoroutineClosureId { Self::new_impl(db, loc) } } + +/// An anonymous const expression that appears in a type position (e.g., array lengths, +/// const generic arguments like `{ N + 1 }`). Unlike named constants, these don't have +/// their own `Body` — their expressions live in the parent's signature `ExpressionStore`. +#[derive(Debug, Hash, PartialEq, Eq, Clone)] +pub struct AnonConstLoc { + /// The owner store containing this expression. + pub owner: ExpressionStoreOwnerId, + /// The ExprId within the owner's ExpressionStore that is the root + /// of this anonymous const expression. + pub expr: ExprId, + pub ty: StoredTy, +} +impl_intern_key!(AnonConstId, AnonConstLoc); + +/// A constant, which might appears as a const item, an anonymous const block in expressions +/// or patterns, or as a constant in types with const generics. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)] +pub enum GeneralConstId { + ConstId(ConstId), + StaticId(StaticId), + AnonConstId(AnonConstId), +} + +impl_from!(ConstId, StaticId, AnonConstId for GeneralConstId); + +impl GeneralConstId { + pub fn generic_def(self, db: &dyn HirDatabase) -> Option<GenericDefId> { + match self { + GeneralConstId::ConstId(it) => Some(it.into()), + GeneralConstId::StaticId(it) => Some(it.into()), + GeneralConstId::AnonConstId(it) => Some(it.loc(db).owner.generic_def(db)), + } + } + + pub fn name(self, db: &dyn DefDatabase) -> String { + match self { + GeneralConstId::StaticId(it) => { + StaticSignature::of(db, it).name.display(db, Edition::CURRENT).to_string() + } + GeneralConstId::ConstId(const_id) => { + ConstSignature::of(db, const_id).name.as_ref().map_or_else( + || "_".to_owned(), + |name| name.display(db, Edition::CURRENT).to_string(), + ) + } + GeneralConstId::AnonConstId(_) => "{anon const}".to_owned(), + } + } +} diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs index d3db2a9057..49807cc6c0 100644 --- a/crates/hir-ty/src/lower.rs +++ b/crates/hir-ty/src/lower.rs @@ -13,8 +13,8 @@ use std::{cell::OnceCell, iter, mem}; use either::Either; use hir_def::{ AdtId, AssocItemId, CallableDefId, ConstId, ConstParamId, EnumId, EnumVariantId, - ExpressionStoreOwnerId, FunctionId, GeneralConstId, GenericDefId, GenericParamId, HasModule, - ImplId, ItemContainerId, LifetimeParamId, LocalFieldId, Lookup, StaticId, StructId, TraitId, + ExpressionStoreOwnerId, FunctionId, GenericDefId, GenericParamId, HasModule, ImplId, + ItemContainerId, LifetimeParamId, LocalFieldId, Lookup, StaticId, StructId, TraitId, TypeAliasId, TypeOrConstParamId, TypeParamId, UnionId, VariantId, builtin_type::BuiltinType, expr_store::{ExpressionStore, HygieneId, path::Path}, @@ -53,7 +53,7 @@ use triomphe::{Arc, ThinArc}; use crate::{ FnAbi, ImplTraitId, TyLoweringDiagnostic, TyLoweringDiagnosticKind, consteval::intern_const_ref, - db::{HirDatabase, InternedOpaqueTyId}, + db::{GeneralConstId, HirDatabase, InternedOpaqueTyId}, generics::{Generics, SingleGenerics, generics}, next_solver::{ AliasTy, Binder, BoundExistentialPredicates, Clause, ClauseKind, Clauses, Const, diff --git a/crates/hir-ty/src/mir/eval.rs b/crates/hir-ty/src/mir/eval.rs index 8701ad5be6..af2912b185 100644 --- a/crates/hir-ty/src/mir/eval.rs +++ b/crates/hir-ty/src/mir/eval.rs @@ -5,8 +5,8 @@ use std::{borrow::Cow, cell::RefCell, fmt::Write, iter, mem, ops::Range}; use base_db::{Crate, target::TargetLoadError}; use either::Either; use hir_def::{ - AdtId, DefWithBodyId, EnumVariantId, ExpressionStoreOwnerId, FunctionId, GeneralConstId, - HasModule, ItemContainerId, Lookup, StaticId, VariantId, + AdtId, DefWithBodyId, EnumVariantId, ExpressionStoreOwnerId, FunctionId, HasModule, + ItemContainerId, Lookup, StaticId, VariantId, expr_store::{Body, HygieneId}, item_tree::FieldsShape, lang_item::LangItems, @@ -39,7 +39,7 @@ use triomphe::Arc; use crate::{ CallableDefId, ComplexMemoryMap, InferenceResult, MemoryMap, ParamEnvAndCrate, consteval::{self, ConstEvalError, try_const_usize}, - db::{HirDatabase, InternedClosureId}, + db::{GeneralConstId, HirDatabase, InternedClosureId}, display::{ClosureStyle, DisplayTarget, HirDisplay}, infer::PointerCast, layout::{Layout, LayoutError, RustcEnumVariantIdx}, @@ -2058,9 +2058,9 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> { ConstKind::Unevaluated(UnevaluatedConst { def: const_id, args: subst }) => { let mut id = const_id.0; let mut subst = subst; - if let hir_def::GeneralConstId::ConstId(c) = id { + if let GeneralConstId::ConstId(c) = id { let (c, s) = lookup_impl_const(&self.infcx, self.param_env.param_env, c, subst); - id = hir_def::GeneralConstId::ConstId(c); + id = GeneralConstId::ConstId(c); subst = s; } let allocation = match id { diff --git a/crates/hir-ty/src/mir/lower.rs b/crates/hir-ty/src/mir/lower.rs index 8f8f557716..974bc40965 100644 --- a/crates/hir-ty/src/mir/lower.rs +++ b/crates/hir-ty/src/mir/lower.rs @@ -4,8 +4,8 @@ use std::{fmt::Write, iter, mem}; use base_db::Crate; use hir_def::{ - AdtId, DefWithBodyId, EnumVariantId, ExpressionStoreOwnerId, GeneralConstId, GenericParamId, - HasModule, ItemContainerId, LocalFieldId, Lookup, TraitId, TupleId, + AdtId, DefWithBodyId, EnumVariantId, ExpressionStoreOwnerId, GenericParamId, HasModule, + ItemContainerId, LocalFieldId, Lookup, TraitId, TupleId, expr_store::{Body, ExpressionStore, HygieneId, path::Path}, hir::{ ArithOp, Array, BinaryOp, BindingAnnotation, BindingId, ClosureKind, ExprId, ExprOrPatId, @@ -29,7 +29,7 @@ use syntax::TextRange; use crate::{ Adjust, Adjustment, AutoBorrow, CallableDefId, ParamEnvAndCrate, consteval::ConstEvalError, - db::{HirDatabase, InternedClosure, InternedClosureId}, + db::{GeneralConstId, HirDatabase, InternedClosure, InternedClosureId}, display::{DisplayTarget, HirDisplay, hir_display_with_store}, generics::generics, infer::{ diff --git a/crates/hir-ty/src/next_solver/def_id.rs b/crates/hir-ty/src/next_solver/def_id.rs index 542eca3ded..7c67e65876 100644 --- a/crates/hir-ty/src/next_solver/def_id.rs +++ b/crates/hir-ty/src/next_solver/def_id.rs @@ -1,9 +1,9 @@ //! Definition of `SolverDefId` use hir_def::{ - AdtId, AnonConstId, AttrDefId, BuiltinDeriveImplId, CallableDefId, ConstId, DefWithBodyId, - EnumId, EnumVariantId, ExpressionStoreOwnerId, FunctionId, GeneralConstId, GenericDefId, - ImplId, StaticId, StructId, TraitId, TypeAliasId, UnionId, VariantId, + AdtId, AttrDefId, BuiltinDeriveImplId, CallableDefId, ConstId, DefWithBodyId, EnumId, + EnumVariantId, ExpressionStoreOwnerId, FunctionId, GenericDefId, ImplId, StaticId, StructId, + TraitId, TypeAliasId, UnionId, VariantId, signatures::{ ConstSignature, EnumSignature, FunctionSignature, StaticSignature, StructSignature, TraitSignature, TypeAliasSignature, UnionSignature, @@ -13,7 +13,8 @@ use rustc_type_ir::inherent; use stdx::impl_from; use crate::db::{ - InternedClosureId, InternedCoroutineClosureId, InternedCoroutineId, InternedOpaqueTyId, + AnonConstId, GeneralConstId, InternedClosureId, InternedCoroutineClosureId, + InternedCoroutineId, InternedOpaqueTyId, }; use super::DbInterner; diff --git a/crates/hir-ty/src/next_solver/solver.rs b/crates/hir-ty/src/next_solver/solver.rs index 6abc87f088..5e7e03e0b2 100644 --- a/crates/hir-ty/src/next_solver/solver.rs +++ b/crates/hir-ty/src/next_solver/solver.rs @@ -1,7 +1,7 @@ //! Defining `SolverContext` for next-trait-solver. use hir_def::{ - AssocItemId, GeneralConstId, + AssocItemId, signatures::{ConstSignature, TypeAliasSignature}, }; use rustc_next_trait_solver::delegate::SolverDelegate; @@ -16,6 +16,7 @@ use tracing::debug; use crate::{ ParamEnvAndCrate, Span, + db::GeneralConstId, next_solver::{ AliasTy, AnyImplId, CanonicalVarKind, Clause, ClauseKind, CoercePredicate, GenericArgs, ParamEnv, Predicate, PredicateKind, SubtypePredicate, Ty, TyKind, UnevaluatedConst, |