[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: 5.2 _ENV garbage collection question
- From: Gaspard Bucher <gaspard@...>
- Date: Mon, 27 Jun 2011 11:08:22 +0200
Hi list !
I am experimenting with the _ENV value. From my understanding, _ENV = xxx is now a special lua construct:
1. normal construct
name = 'xxx' --- _ENV.name = 'xxx'
2. special _ENV construct
_ENV = {} --- replace _ENV in place
My question is: since the new _ENV is not assigned to any preexisting environment (it is not _ENV._ENV), is it correct to say that it is assigned to the chunk's environment, replacing the previous value ? But then I would expect values in the previous _ENV to be garbage collected but they are not. Any hint ?
=============================== test.lua (5.2)
local print = print
local collectgarbage = collectgarbage
local gc_mt = {}
function gc_mt.__gc(obj)
end
foo = {name = 'foo'}
setmetatable(foo, gc_mt)
_ENV = {}
print(foo) ---- nil as expected
collectgarbage() ---- does not collect old "foo". Why ? Where is it stored ?
print('end') -- the garbage collection after 'end' removes old "foo".
===============================