ARC: ported the GC tests over to --gc:arc

This commit is contained in:
Araq
2019-11-25 15:29:41 +01:00
committed by Andreas Rumpf
parent 879801c639
commit 72237e2bcf
14 changed files with 79 additions and 29 deletions

View File

@@ -28,7 +28,7 @@ proc test(): auto =
var (a, b, _) = test()
doAssert assign_counter == 0
doAssert sink_counter == 12 # + 3 because of the conservative tuple unpacking transformation
doAssert sink_counter == 9 # XXX this is still silly and needs to be investigated
# bug #11510
proc main =

View File

@@ -3,20 +3,28 @@ discard """
disabled: "32bit"
"""
from strutils import join
type
TFoo * = object
TFoo* = object
id: int
fn: proc(){.closure.}
var foo_counter = 0
var alive_foos = newseq[int](0)
proc free*(some: ref TFoo) =
#echo "Tfoo #", some.id, " freed"
alive_foos.del alive_foos.find(some.id)
when defined(gcDestructors):
proc `=destroy`(some: var TFoo) =
alive_foos.del alive_foos.find(some.id)
`=destroy`(some.fn)
else:
proc free*(some: ref TFoo) =
#echo "Tfoo #", some.id, " freed"
alive_foos.del alive_foos.find(some.id)
proc newFoo*(): ref TFoo =
new result, free
when defined(gcDestructors):
new result
else:
new result, free
result.id = foo_counter
alive_foos.add result.id

View File

@@ -10,7 +10,7 @@ type
PModule = ref Module
Node = object
owner*: PModule
owner* {.cursor.}: PModule
data*: array[0..200, char] # some fat to drain memory faster
id: int

View File

@@ -15,7 +15,7 @@ when defined(allow_print):
else:
const print = false
proc myResult3*(i:int):X {.exportc.} =
proc myResult3*(i:int): X {.exportc.} =
if print: echo "3"
new(result)
if print: echo "3-2"

View File

@@ -2,11 +2,11 @@ discard """
outputsub: "no leak: "
"""
when defined(GC_setMaxPause):
when declared(GC_setMaxPause):
GC_setMaxPause 2_000
type
TExpr = object {.inheritable.} ## abstract base class for an expression
TExpr {.inheritable.} = object ## abstract base class for an expression
PLiteral = ref TLiteral
TLiteral = object of TExpr
x: int
@@ -15,7 +15,7 @@ type
a, b: ref TExpr
op2: string
method eval(e: ref TExpr): int =
method eval(e: ref TExpr): int {.base.} =
# override this base method
quit "to override!"
@@ -30,7 +30,7 @@ proc newLit(x: int): ref TLiteral =
result.x = x
result.op1 = $getOccupiedMem()
proc newPlus(a, b: ref TExpr): ref TPlusExpr =
proc newPlus(a, b: sink(ref TExpr)): ref TPlusExpr =
new(result)
result.a = a
result.b = b

View File

@@ -12,7 +12,8 @@ type
proc makePair: PCyclic =
new(result)
new(result.sibling)
result.sibling.sibling = result
when not defined(gcDestructors):
result.sibling.sibling = result
proc loop =
for i in 0..10000:

View File

@@ -19,8 +19,15 @@ var
proc finalizer(x: StrongObject) =
valid.excl(x.id)
when defined(gcDestructors):
proc `=destroy`(x: var TMyObject) =
valid.excl(x.id)
proc create: StrongObject =
new(result, finalizer)
when defined(gcDestructors):
new(result)
else:
new(result, finalizer)
result.id = gid
valid.incl(gid)
inc gid