/
clang
/
lua
Обзор
Документация
Войти
/
clang
/
lua
Код
Вики
Пакеты
0
Релизы
0
Аналитика
master
testes/tracegc.lua
45 строк
855 B
Roberto I
More effort in avoiding errors in finalizers
11 янв 2026, 21:36
11 янв 2026, 21:36
2a7cf4f
Код
Авторство
О чём код?
-- track collections local M = {} -- import list local stderr, collectgarbage = io.stderr, collectgarbage -- the debug version of setmetatable does not create any object (such as -- a '__metatable' string), and so it is more appropriate to be used in -- a finalizer local setmetatable = require"debug".setmetatable 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