--!nocheck
--!nolint UnknownGlobal

local nums = {}
local function insert(n: number)
	table.insert(nums, n)
	print(n)
end

insert(1)

-- Defer will run at the end of the resumption cycle, but without yielding
defer(function()
	insert(5)
end)

-- Spawn will instantly run up until the first yield, and must then be resumed manually ...
spawn(function()
	insert(2)
	coroutine.yield()
	error("unreachable code")
end)

-- ... unless calling functions created using `lua.create_async_function(...)`,
-- which will resume their calling thread with their result automatically
spawn(function()
	insert(3)
	sleep(1)
	insert(6)
end)

insert(4)

return nums