diff options
Diffstat (limited to 'testes')
-rw-r--r-- | testes/gengc.lua | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/testes/gengc.lua b/testes/gengc.lua index 7a7dabdd..93b5afd7 100644 --- a/testes/gengc.lua +++ b/testes/gengc.lua | |||
@@ -37,6 +37,22 @@ do | |||
37 | end | 37 | end |
38 | 38 | ||
39 | 39 | ||
40 | do | ||
41 | -- ensure that 'firstold1' is corrected when object is removed from | ||
42 | -- the 'allgc' list | ||
43 | local function foo () end | ||
44 | local old = {10} | ||
45 | collectgarbage() -- make 'old' old | ||
46 | assert(not T or T.gcage(old) == "old") | ||
47 | setmetatable(old, {}) -- new table becomes OLD0 (barrier) | ||
48 | assert(not T or T.gcage(getmetatable(old)) == "old0") | ||
49 | collectgarbage("step", 0) -- new table becomes OLD1 and firstold1 | ||
50 | assert(not T or T.gcage(getmetatable(old)) == "old1") | ||
51 | setmetatable(getmetatable(old), {__gc = foo}) -- get it out of allgc list | ||
52 | collectgarbage("step", 0) -- should not seg. fault | ||
53 | end | ||
54 | |||
55 | |||
40 | do -- bug in 5.4.0 | 56 | do -- bug in 5.4.0 |
41 | -- When an object aged OLD1 is finalized, it is moved from the list | 57 | -- When an object aged OLD1 is finalized, it is moved from the list |
42 | -- 'finobj' to the *beginning* of the list 'allgc', but that part of the | 58 | -- 'finobj' to the *beginning* of the list 'allgc', but that part of the |