about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_mir/interpret/operand.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/librustc_mir/interpret/operand.rs b/src/librustc_mir/interpret/operand.rs
index 83b5831f3ad..8d2190d22c0 100644
--- a/src/librustc_mir/interpret/operand.rs
+++ b/src/librustc_mir/interpret/operand.rs
@@ -291,7 +291,7 @@ impl<Tag> Operand<Tag> {
 
 #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)]
 pub struct OpTy<'tcx, Tag=()> {
-    pub op: Operand<Tag>, // This is used by [priroda](https://github.com/oli-obk/priroda)
+    crate op: Operand<Tag>, // ideally we'd make this private, but const_prop needs this
     pub layout: TyLayout<'tcx>,
 }
 
@@ -772,4 +772,14 @@ impl<'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M>
         })
     }
 
+    /// This is used by [priroda](https://github.com/oli-obk/priroda) to get an OpTy from a local
+    pub fn read_local_of_frame(
+        &self,
+        frame: &super::Frame,
+        local: mir::Local
+    ) -> EvalResult<'tcx, OpTy<'tcx>> {
+        let op = frame.locals[local].access()?;
+        let layout = self.layout_of_local(frame, local)?;
+        OpTy { op, layout }
+    }
 }