From 9f27e956a8ede1a12b3c93cc3b647951ebd0c95e Mon Sep 17 00:00:00 2001 From: Rerumu Date: Mon, 22 Aug 2022 21:45:48 -0400 Subject: [PATCH] Add `load.string` to the runtime --- codegen/luajit/runtime/runtime.lua | 6 ++++++ codegen/luau/runtime/runtime.lua | 13 +++++++++++++ 2 files changed, 19 insertions(+) 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