Re-use constness_for_typeck
instead of rolling it ourselves
This commit is contained in:
parent
1761d88f4a
commit
e37947f097
2 changed files with 6 additions and 28 deletions
|
@ -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),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue