]> git.lizzy.rs Git - rust.git/commitdiff
Handle statics.
authorScott Olson <scott@solson.me>
Tue, 10 May 2016 02:03:13 +0000 (20:03 -0600)
committerScott Olson <scott@solson.me>
Tue, 10 May 2016 02:03:13 +0000 (20:03 -0600)
src/interpreter.rs

index d86dbdbe6877fe82e5bebd11ee7834a0317d08d2..8fc302637f81e074df42df248fae03656ce364cd 100644 (file)
@@ -846,6 +846,8 @@ fn eval_operand(&mut self, op: &mir::Operand<'tcx>) -> EvalResult<Pointer> {
                     Value { ref value } => Ok(self.const_to_ptr(value)?),
                     Item { .. } => unimplemented!(),
                     Promoted { index } => {
+                        // TODO(tsion): Mark constants and statics as read-only and cache their
+                        // values.
                         let current_mir = self.mir();
                         let mir = &current_mir.promoted[index];
                         self.call_nested(mir).map(Option::unwrap)
@@ -864,7 +866,11 @@ fn eval_lvalue(&mut self, lvalue: &mir::Lvalue<'tcx>) -> EvalResult<Lvalue> {
             Var(i) => self.frame().locals[self.frame().var_offset + i as usize],
             Temp(i) => self.frame().locals[self.frame().temp_offset + i as usize],
 
-            Static(_def_id) => unimplemented!(),
+            Static(def_id) => {
+                // TODO(tsion): Mark constants and statics as read-only and cache their values.
+                let mir = self.load_mir(def_id);
+                self.call_nested(&mir)?.unwrap()
+            }
 
             Projection(ref proj) => {
                 let base = self.eval_lvalue(&proj.base)?;