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. /// Panics if `LocalDefId` does not have an associated body.
pub fn body_owner_kind(&self, id: HirId) -> BodyOwnerKind { 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) { match self.get(id) {
Node::Item(&Item { kind: ItemKind::Const(..), .. }) Node::Item(&Item { kind: ItemKind::Const(..), .. })
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Const(..), .. }) | Node::TraitItem(&TraitItem { kind: TraitItemKind::Const(..), .. })
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Const(..), .. }) | Node::ImplItem(&ImplItem { kind: ImplItemKind::Const(..), .. })
| Node::AnonConst(_) => Ok(BodyOwnerKind::Const), | Node::AnonConst(_) => BodyOwnerKind::Const,
Node::Ctor(..) Node::Ctor(..)
| Node::Item(&Item { kind: ItemKind::Fn(..), .. }) | Node::Item(&Item { kind: ItemKind::Fn(..), .. })
| Node::TraitItem(&TraitItem { kind: TraitItemKind::Fn(..), .. }) | Node::TraitItem(&TraitItem { kind: TraitItemKind::Fn(..), .. })
| Node::ImplItem(&ImplItem { kind: ImplItemKind::Fn(..), .. }) => Ok(BodyOwnerKind::Fn), | Node::ImplItem(&ImplItem { kind: ImplItemKind::Fn(..), .. }) => BodyOwnerKind::Fn,
Node::Item(&Item { kind: ItemKind::Static(_, m, _), .. }) => { Node::Item(&Item { kind: ItemKind::Static(_, m, _), .. }) => BodyOwnerKind::Static(m),
Ok(BodyOwnerKind::Static(m)) Node::Expr(&Expr { kind: ExprKind::Closure(..), .. }) => BodyOwnerKind::Closure,
} node => bug!("{:#?} is not a body node", node),
Node::Expr(&Expr { kind: ExprKind::Closure(..), .. }) => Ok(BodyOwnerKind::Closure),
node => Err(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 hir_id = local_did.map(|def_id| tcx.hir().local_def_id_to_hir_id(def_id));
let constness = match hir_id { let constness = match hir_id {
Some(hir_id) => match tcx.hir().opt_body_owner_kind(hir_id) { Some(hir_id) => tcx.hir().get(hir_id).constness_for_typeck(),
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,
},
},
None => hir::Constness::NotConst, None => hir::Constness::NotConst,
}; };