1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
use crate::thir::*; use rustc_hir as hir; crate trait ToRef { type Output; fn to_ref(self) -> Self::Output; } impl<'tcx> ToRef for &'tcx hir::Expr<'tcx> { type Output = ExprRef<'tcx>; fn to_ref(self) -> ExprRef<'tcx> { ExprRef::Thir(self) } } impl<'tcx> ToRef for &'tcx &'tcx hir::Expr<'tcx> { type Output = ExprRef<'tcx>; fn to_ref(self) -> ExprRef<'tcx> { ExprRef::Thir(&**self) } } impl<'tcx> ToRef for Expr<'tcx> { type Output = ExprRef<'tcx>; fn to_ref(self) -> ExprRef<'tcx> { ExprRef::Mirror(Box::new(self)) } } impl<'tcx, T, U> ToRef for &'tcx Option<T> where &'tcx T: ToRef<Output = U>, { type Output = Option<U>; fn to_ref(self) -> Option<U> { self.as_ref().map(|expr| expr.to_ref()) } } impl<'tcx, T, U> ToRef for &'tcx Vec<T> where &'tcx T: ToRef<Output = U>, { type Output = Vec<U>; fn to_ref(self) -> Vec<U> { self.iter().map(|expr| expr.to_ref()).collect() } } impl<'tcx, T, U> ToRef for &'tcx [T] where &'tcx T: ToRef<Output = U>, { type Output = Vec<U>; fn to_ref(self) -> Vec<U> { self.iter().map(|expr| expr.to_ref()).collect() } }