mirror of https://github.com/lua/lua.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
680 B
40 lines
680 B
-- 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
|
|
|