diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-11-28 10:31:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-28 10:31:06 +0100 |
commit | d2d851a1f357a3828df751c42a34e5c639bdbee8 (patch) | |
tree | 5b26bc6f629b755ef9194a33b7a5fba22a63a5c7 /lib/system | |
parent | 1a85c5231b6ba3bc0c2db0eba1e86989cd7092e1 (diff) | |
parent | d857b4bc0e1d07ab8c47a264ed6e3220b5a16d54 (diff) | |
download | Nim-d2d851a1f357a3828df751c42a34e5c639bdbee8.tar.gz |
Merge pull request #4878 from yglukhov/gc-frameinfo
Cosmetics
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/gc.nim | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/system/gc.nim b/lib/system/gc.nim index 3bb0f62ff..7fb4c7ac7 100644 --- a/lib/system/gc.nim +++ b/lib/system/gc.nim @@ -445,6 +445,15 @@ proc gcInvariant*() = markForDebug(gch) {.pop.} +template setFrameInfo(c: PCell) = + when leakDetector: + if framePtr != nil and framePtr.prev != nil: + c.filename = framePtr.prev.filename + c.line = framePtr.prev.line + else: + c.filename = nil + c.line = 0 + proc rawNewObj(typ: PNimType, size: int, gch: var GcHeap): pointer = # generates a new object and sets its reference counter to 0 sysAssert(allocInv(gch.region), "rawNewObj begin") @@ -455,13 +464,7 @@ proc rawNewObj(typ: PNimType, size: int, gch: var GcHeap): pointer = gcAssert((cast[ByteAddress](res) and (MemAlign-1)) == 0, "newObj: 2") # now it is buffered in the ZCT res.typ = typ - when leakDetector: - res.filename = nil - res.line = 0 - when not hasThreadSupport: - if framePtr != nil and framePtr.prev != nil: - res.filename = framePtr.prev.filename - res.line = framePtr.prev.line + setFrameInfo(res) # refcount is zero, color is black, but mark it to be in the ZCT res.refcount = ZctFlag sysAssert(isAllocatedPtr(gch.region, res), "newObj: 3") @@ -510,13 +513,7 @@ proc newObjRC1(typ: PNimType, size: int): pointer {.compilerRtl.} = sysAssert((cast[ByteAddress](res) and (MemAlign-1)) == 0, "newObj: 2") # now it is buffered in the ZCT res.typ = typ - when leakDetector: - res.filename = nil - res.line = 0 - when not hasThreadSupport: - if framePtr != nil and framePtr.prev != nil: - res.filename = framePtr.prev.filename - res.line = framePtr.prev.line + setFrameInfo(res) res.refcount = rcIncrement # refcount is 1 sysAssert(isAllocatedPtr(gch.region, res), "newObj: 3") when logGC: writeCell("new cell", res) |