summary refs log tree commit diff stats
path: root/lib/arch
Commit message (Expand)AuthorAgeFilesLines
* Coroutine rework.Rokas Kupstys2017-02-208-344/+160
* fixes #4879Andreas Rumpf2016-10-201-1/+1
* Add description to arch.nimFederico Ceratto2016-09-281-0/+3
* Coroutine support for i386/amd64 platforms unix/windows OSes markAndSweep/ref...rku2015-07-316-0/+341
f='#n7'>7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
































                                                        
         














                                                         
# Test the implementation of the new operator
# and the code generation for gc walkers
# (and the garbage collector):

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()