Warp/src/Index/Util/Spawn.luau
2024-01-05 19:14:38 +07:00

29 lines
525 B
Lua

--!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