summaryrefslogtreecommitdiff
path: root/zig-lua/lua-5.4.7/testes/tracegc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'zig-lua/lua-5.4.7/testes/tracegc.lua')
-rw-r--r--zig-lua/lua-5.4.7/testes/tracegc.lua40
1 files changed, 40 insertions, 0 deletions
diff --git a/zig-lua/lua-5.4.7/testes/tracegc.lua b/zig-lua/lua-5.4.7/testes/tracegc.lua
new file mode 100644
index 0000000..9c5c1b3
--- /dev/null
+++ b/zig-lua/lua-5.4.7/testes/tracegc.lua
@@ -0,0 +1,40 @@
+-- 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