diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-02-21 07:57:29 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-02-21 07:57:29 +0100 |
commit | 43d570c17810fa9d8ab7605f3ce4dfd2120fdd63 (patch) | |
tree | ab7bd623e896251e71311e3cf12e4d9e21777c1a /lib/system/repr.nim | |
parent | 6c10d331db8c00accc7ac2884ac46c89ef72cc3b (diff) | |
download | Nim-43d570c17810fa9d8ab7605f3ce4dfd2120fdd63.tar.gz |
gc:destructors: make system/repr compile
Diffstat (limited to 'lib/system/repr.nim')
-rw-r--r-- | lib/system/repr.nim | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/system/repr.nim b/lib/system/repr.nim index ff8f92404..68d316b73 100644 --- a/lib/system/repr.nim +++ b/lib/system/repr.nim @@ -160,6 +160,21 @@ when not defined(useNimRtl): reprAux(result, cast[pointer](cast[ByteAddress](p) + i*bs), typ.base, cl) add result, "]" + when defined(gcDestructors): + type + GenericSeq = object + len: int + p: pointer + PGenericSeq = ptr GenericSeq + const payloadOffset = sizeof(int) + sizeof(pointer) + # see seqs.nim: cap: int + # region: Allocator + + template payloadPtr(x: untyped): untyped = cast[PGenericSeq](x).p + else: + const payloadOffset = GenericSeqSize + template payloadPtr(x: untyped): untyped = x + proc reprSequence(result: var string, p: pointer, typ: PNimType, cl: var ReprClosure) = if p == nil: @@ -170,7 +185,7 @@ when not defined(useNimRtl): var bs = typ.base.size for i in 0..cast[PGenericSeq](p).len-1: if i > 0: add result, ", " - reprAux(result, cast[pointer](cast[ByteAddress](p) + GenericSeqSize + i*bs), + reprAux(result, cast[pointer](cast[ByteAddress](payloadPtr(p)) + payloadOffset + i*bs), typ.base, cl) add result, "]" |