diff --git a/src/vm/mod.rs b/src/vm/mod.rs index 31964eb..02604e9 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -367,23 +367,11 @@ pub fn run_byte_code(state: &mut DvmState, context: &DvmContext, byte_code: &[u8 }; let constant = lib.constants.get(const_id).unwrap(); let DmConstant::String(s) = constant; - - // Alloc memory for constant - let size = s.len(); - let layout = Layout::from_size_align(size, 1).unwrap(); - let raw_pointer = unsafe { alloc(layout) }; - - // Move constant to memory - let bytes = s.as_bytes(); - for i in 0..size { - unsafe { - raw_pointer.add(i).write(bytes[i]); - } - } + let pointer = s.as_ptr(); // Store the pointer metadata in target registers. - state.registers[address_register] = DvmValue::USize(raw_pointer as usize); - state.registers[size_register] = DvmValue::USize(size); + state.registers[address_register] = DvmValue::USize(pointer as usize); + state.registers[size_register] = DvmValue::USize(s.len()); } ALLOC_RAW => { // Allocates a raw number of bytes, with the number of bytes determined by the value