code cleanup for mark&sweep GC

This commit is contained in:
Araq 2013-02-07 16:09:46 +01:00
commit 4ee9816a78
7 changed files with 43 additions and 88 deletions

View file

@ -68,38 +68,6 @@ proc deinit(s: var TCellSeq) =
s.len = 0
s.cap = 0
# ------------------- cyclic cell temporary data structure --------------------
type
TCycleCell = object
cell: PCell
oldRefcount, newRefcount: TRefCount
PCycleCellArray = ptr array[0..100_000_000, TCycleCell]
TCycleCellSeq {.final, pure.} = object
len, cap: int
d: PCycleCellArray
proc reserveSlot(s: var TCycleCellSeq): int =
if s.len >= s.cap:
s.cap = s.cap * 3 div 2
var d = cast[PCycleCellArray](Alloc(s.cap * sizeof(TCycleCell)))
copyMem(d, s.d, s.len * sizeof(TCycleCell))
Dealloc(s.d)
s.d = d
result = s.len
inc(s.len)
proc init(s: var TCycleCellSeq, cap: int = 1024) =
s.len = 0
s.cap = cap
s.d = cast[PCycleCellArray](Alloc(cap * sizeof(TCycleCell)))
proc deinit(s: var TCycleCellSeq) =
Dealloc(s.d)
s.d = nil
s.len = 0
s.cap = 0
# ------------------- cell set handling ---------------------------------------
const
@ -230,7 +198,7 @@ iterator elements(t: TCellSet): PCell {.inline.} =
inc(i)
r = r.next
iterator elementsWithout(t, s: TCellSet): PCell {.inline.} =
iterator elementsExcept(t, s: TCellSet): PCell {.inline.} =
var r = t.head
while r != nil:
let ss = CellSetGet(s, r.key)