mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
a73e808b25
Based on https://github.com/lua/lua/releases/tag/v5.4.3 (commit eadd8c7).
40 lines
680 B
Lua
40 lines
680 B
Lua
-- track collections
|
|
|
|
local M = {}
|
|
|
|
-- import list
|
|
local setmetatable, stderr, collectgarbage =
|
|
setmetatable, io.stderr, collectgarbage
|
|
|
|
_ENV = nil
|
|
|
|
local active = false
|
|
|
|
|
|
-- each time a table is collected, remark it for finalization on next
|
|
-- cycle
|
|
local mt = {}
|
|
function mt.__gc (o)
|
|
stderr:write'.' -- mark progress
|
|
if active then
|
|
setmetatable(o, mt) -- remark object for finalization
|
|
end
|
|
end
|
|
|
|
|
|
function M.start ()
|
|
if not active then
|
|
active = true
|
|
setmetatable({}, mt) -- create initial object
|
|
end
|
|
end
|
|
|
|
|
|
function M.stop ()
|
|
if active then
|
|
active = false
|
|
collectgarbage() -- call finalizer for the last time
|
|
end
|
|
end
|
|
|
|
return M
|