mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
* defaults to Orc * bootstrap using refc * use gc * init orc defines * unregister orc * fix gc * fix commands * add prepareMutation for orc * enable deepcopy for orc * prepareMutation * more fixes * some cases * bug #20081 * partial fixes * partial fixes * fixes command line * more fixes * build Nim with refc * use gc * more fixes * rstore * orc doesn't support threadpool * more shallowCopy * more fixes * fixes unsafeNew * workarounds * small * more fixes * fixes some megatest * tcodegenbugs1 refc * fxies megatest * build nimble with refc * workaround tensordsl tests * replace shallowCopy with move * fixes action * workaround * add todo * fixes important packages * unpublic unregisterArcOrc * fixes cpp * enable windows Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
60 lines
1.1 KiB
Nim
60 lines
1.1 KiB
Nim
discard """
|
|
matrix: "--mm:refc"
|
|
outputsub: '''
|
|
Simple tree node allocation worked!
|
|
Simple cycle allocation worked!
|
|
'''
|
|
joinable: false
|
|
"""
|
|
|
|
# Test the implementation of the new operator
|
|
# and the code generation for gc walkers
|
|
# (and the garbage collector):
|
|
|
|
## todo fixme it doesn't work for ORC
|
|
type
|
|
PNode = ref TNode
|
|
TNode = object
|
|
data: int
|
|
str: string
|
|
le, ri: PNode
|
|
|
|
TStressTest = ref array[0..45, array[1..45, TNode]]
|
|
|
|
proc finalizer(n: PNode) =
|
|
write(stdout, n.data)
|
|
write(stdout, " is now freed\n")
|
|
|
|
proc newNode(data: int, le, ri: PNode): PNode =
|
|
new(result, finalizer)
|
|
result.le = le
|
|
result.ri = ri
|
|
result.data = data
|
|
|
|
# now loop and build a tree
|
|
proc main() =
|
|
var
|
|
i = 0
|
|
p: TStressTest
|
|
while i < 1000:
|
|
var n: PNode
|
|
|
|
n = newNode(i, nil, newNode(i + 10000, nil, nil))
|
|
inc(i)
|
|
new(p)
|
|
|
|
write(stdout, "Simple tree node allocation worked!\n")
|
|
i = 0
|
|
while i < 1000:
|
|
var m = newNode(i + 20000, nil, nil)
|
|
var k = newNode(i + 30000, nil, nil)
|
|
m.le = m
|
|
m.ri = k
|
|
k.le = m
|
|
k.ri = k
|
|
inc(i)
|
|
|
|
write(stdout, "Simple cycle allocation worked!\n")
|
|
|
|
main()
|