1
Fork 0

Re-use constness_for_typeck instead of rolling it ourselves

This commit is contained in:
Oli Scherer 2021-10-21 15:28:26 +00:00 committed by Deadbeef
parent 1761d88f4a
commit e37947f097
No known key found for this signature in database
GPG key ID: 6D017A96D8E6C2F9
2 changed files with 6 additions and 28 deletions

View file

@ -454,30 +454,18 @@ impl<'hir> Map<'hir> {
///
/// Panics if `LocalDefId` does not have an associated body.
pub fn body_owner_kind(&self, id: HirId) -> BodyOwnerKind {
match self.opt_body_owner_kind(id) {
Ok(kind) => kind,
Err(node) => bug!("{:#?} is not a body node", node),
}
}
/// Returns the `BodyOwnerKind` of this `LocalDefId`.
///
/// Returns the `Node` if `LocalDefId` does not have an associated body.
pub fn opt_body_owner_kind(&self, id: HirId) -> Result<BodyOwnerKind, Node<'_>> {
match self.get(id) {
Node::Item(&Item { kind: ItemKind::Const(..), .. })
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Const(..), .. })
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Const(..), .. })
| Node::AnonConst(_) => Ok(BodyOwnerKind::Const),
| Node::AnonConst(_) => BodyOwnerKind::Const,
Node::Ctor(..)
| Node::Item(&Item { kind: ItemKind::Fn(..), .. })
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Fn(..), .. })
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Fn(..), .. }) => Ok(BodyOwnerKind::Fn),
Node::Item(&Item { kind: ItemKind::Static(_, m, _), .. }) => {
Ok(BodyOwnerKind::Static(m))
}
Node::Expr(&Expr { kind: ExprKind::Closure(..), .. }) => Ok(BodyOwnerKind::Closure),
node => Err(node),
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Fn(..), .. }) => BodyOwnerKind::Fn,
Node::Item(&Item { kind: ItemKind::Static(_, m, _), .. }) => BodyOwnerKind::Static(m),
Node::Expr(&Expr { kind: ExprKind::Closure(..), .. }) => BodyOwnerKind::Closure,
node => bug!("{:#?} is not a body node", node),
}
}

View file

@ -289,17 +289,7 @@ fn param_env(tcx: TyCtxt<'_>, def_id: DefId) -> ty::ParamEnv<'_> {
let hir_id = local_did.map(|def_id| tcx.hir().local_def_id_to_hir_id(def_id));
let constness = match hir_id {
Some(hir_id) => match tcx.hir().opt_body_owner_kind(hir_id) {
Err(hir::Node::Item(&hir::Item {
kind: hir::ItemKind::Impl(hir::Impl { constness, .. }),
..
})) => constness,
Err(_) => hir::Constness::NotConst,
Ok(_) => match tcx.hir().body_const_context(local_did.unwrap()) {
Some(_) => hir::Constness::Const,
None => hir::Constness::NotConst,
},
},
Some(hir_id) => tcx.hir().get(hir_id).constness_for_typeck(),
None => hir::Constness::NotConst,
};