Warp/src/Index/Util/Spawn.luau

30 lines
525 B
Lua
Raw Normal View History

2024-01-05 12:14:38 +00:00
--!native
--!strict
local thread: thread? = nil
local function passer(fn, ...): ()
local hold = thread
thread = nil
fn(...)
thread = hold
end
local function yield(): never
while true do
passer(coroutine.yield())
end
end
if not thread then
thread = coroutine.create(yield)
coroutine.resume(thread :: any, thread)
end
return function(fn: (...any) -> (), ...: any): ()
if not thread then
thread = coroutine.create(yield)
coroutine.resume(thread :: any, thread)
end
task.spawn(thread :: thread, fn, ...)
end