12345678910111213141516171819202122232425262728293031323334353637383940 |
- -- track collections
- local M = {}
- -- import list
- local setmetatable, stderr, collectgarbage =
- setmetatable, io.stderr, collectgarbage
- global none
- 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
|