diff --git a/codegen/luajit/runtime/runtime.lua b/codegen/luajit/runtime/runtime.lua index ba491ba..6fe6b83 100644 --- a/codegen/luajit/runtime/runtime.lua +++ b/codegen/luajit/runtime/runtime.lua @@ -706,6 +706,12 @@ do return by_offset(memory.data, addr).f64 end + function load.string(memory, addr, len) + local start = cast(alias_t, memory.data) + addr + + return ffi.string(start, len) + end + function store.i32_n8(memory, addr, value) by_offset(memory.data, addr).i8 = value end diff --git a/codegen/luau/runtime/runtime.lua b/codegen/luau/runtime/runtime.lua index 9fdce07..226bfb0 100644 --- a/codegen/luau/runtime/runtime.lua +++ b/codegen/luau/runtime/runtime.lua @@ -622,6 +622,7 @@ do local math_floor = math.floor local string_byte = string.byte + local string_char = string.char local string_unpack = string.unpack local reinterpret_f32_i32 = module.reinterpret.f32_i32 @@ -830,6 +831,18 @@ do return reinterpret_f64_i64(raw) end + function load.string(memory, addr, len) + local buffer = table.create(len) + + for i = 1, len do + local raw = load_byte(memory.data, addr + i - 1) + + buffer[i] = string_char(raw) + end + + return table.concat(buffer) + end + function store.i32_n8(memory, addr, value) store_byte(memory.data, addr, value) end