luatraverse.lua

changeset 3
842f3003db2a
parent 2
251fd96e1c34
child 4
a4f608729bbf
equal deleted inserted replaced
2:251fd96e1c34 3:842f3003db2a
5 -- countreferences and findallpaths 5 -- countreferences and findallpaths
6 -- 6 --
7 -- Alexandra Barros - 2006.03.15 7 -- Alexandra Barros - 2006.03.15
8 ------------------------------------------------------------------------------- 8 -------------------------------------------------------------------------------
9 9
10 module("gc", package.seeall) 10 module("traverse", package.seeall)
11 local traverse = _M;
11 12
12 local List = {} 13 local List = {}
13 14
14 function List.new () 15 function List.new ()
15 return {first = 0, last = -1} 16 return {first = 0, last = -1}
60 for i=1, #ignoreobjs do 61 for i=1, #ignoreobjs do
61 env.marked[ignoreobjs[i]] = true 62 env.marked[ignoreobjs[i]] = true
62 end 63 end
63 end 64 end
64 65
65 env.marked["gc"] = true 66 env.marked["traverse"] = true
66 env.marked[gc] = true 67 env.marked[traverse] = true
67 68
68 -- marks and inserts on the list 69 -- marks and inserts on the list
69 edge(env, nil, "_G", "isname", nil) 70 edge(env, nil, "_G", "isname", nil)
70 edge(env, nil, _G, "key", "_G") 71 edge(env, nil, _G, "key", "_G")
71 72
86 end 87 end
87 88
88 while not List.isempty(env.list) do 89 while not List.isempty(env.list) do
89 90
90 local obj = List.pop(env.list) 91 local obj = List.pop(env.list)
91 local t = type(obj) 92 local t = type(obj)
92 gc["traverse" .. t](env, obj) 93 traverse["traverse" .. t](env, obj)
93 94
94 end 95 end
95 96
96 end 97 end
97 98

mercurial