mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 05:50:30 +00:00
gc:destructors: make system/repr compile
This commit is contained in:
@@ -3383,7 +3383,7 @@ when not defined(JS): #and not defined(nimscript):
|
||||
when not defined(nimscript) and hasAlloc:
|
||||
when not defined(gcDestructors):
|
||||
include "system/assign"
|
||||
include "system/repr"
|
||||
include "system/repr"
|
||||
|
||||
when hostOS != "standalone" and not defined(nimscript):
|
||||
proc getCurrentException*(): ref Exception {.compilerRtl, inl, benign.} =
|
||||
|
||||
@@ -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, "]"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user