- // TODO(solson): Try making const_to_primval instead.
- fn const_to_ptr(&mut self, const_val: &const_val::ConstVal) -> EvalResult<Pointer> {
- use rustc::middle::const_val::ConstVal::*;
- match *const_val {
- Float(_f) => unimplemented!(),
- Integral(int) => {
- // TODO(solson): Check int constant type.
- let ptr = self.memory.allocate(8);
- self.memory.write_uint(ptr, int.to_u64_unchecked(), 8)?;
- Ok(ptr)
- }
- Str(ref s) => {
- let psize = self.memory.pointer_size;
- let static_ptr = self.memory.allocate(s.len());
- let ptr = self.memory.allocate(psize * 2);
- self.memory.write_bytes(static_ptr, s.as_bytes())?;
- self.memory.write_ptr(ptr, static_ptr)?;
- self.memory.write_usize(ptr.offset(psize as isize), s.len() as u64)?;
- Ok(ptr)
- }
- ByteStr(ref bs) => {
- let psize = self.memory.pointer_size;
- let static_ptr = self.memory.allocate(bs.len());
- let ptr = self.memory.allocate(psize);
- self.memory.write_bytes(static_ptr, bs)?;
- self.memory.write_ptr(ptr, static_ptr)?;
- Ok(ptr)
- }
- Bool(b) => {
- let ptr = self.memory.allocate(1);
- self.memory.write_bool(ptr, b)?;
- Ok(ptr)
- }
- Char(_c) => unimplemented!(),
- Struct(_node_id) => unimplemented!(),
- Tuple(_node_id) => unimplemented!(),
- Function(_def_id) => unimplemented!(),
- Array(_, _) => unimplemented!(),
- Repeat(_, _) => unimplemented!(),
- Dummy => unimplemented!(),
- }
- }
-