]>
Commit | Line | Data |
---|---|---|
1 | use rustc_middle::mir::visit::Visitor; | |
2 | use rustc_middle::mir::{Constant, Location}; | |
3 | use rustc_middle::ty::ConstKind; | |
4 | ||
5 | pub struct RequiredConstsVisitor<'a, 'tcx> { | |
6 | required_consts: &'a mut Vec<Constant<'tcx>>, | |
7 | } | |
8 | ||
9 | impl<'a, 'tcx> RequiredConstsVisitor<'a, 'tcx> { | |
10 | pub fn new(required_consts: &'a mut Vec<Constant<'tcx>>) -> Self { | |
11 | RequiredConstsVisitor { required_consts } | |
12 | } | |
13 | } | |
14 | ||
15 | impl<'a, 'tcx> Visitor<'tcx> for RequiredConstsVisitor<'a, 'tcx> { | |
16 | fn visit_constant(&mut self, constant: &Constant<'tcx>, _: Location) { | |
17 | if let Some(ct) = constant.literal.const_for_ty() { | |
18 | if let ConstKind::Unevaluated(_) = ct.val { | |
19 | self.required_consts.push(*constant); | |
20 | } | |
21 | } | |
22 | } | |
23 | } |