summary refs log tree commit diff stats
path: root/tests/arc/topt_refcursors.nim
blob: f097150a34a127c4eb07d9e33845a811379da0e7 (plain) (blame)
1
2
3
4
5
6
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
discard """
  output: ''''''
  cmd: '''nim c --gc:arc --expandArc:traverse --hint:Performance:off $file'''
  nimout: '''--expandArc: traverse

var
  it_cursor
  jt_cursor
it_cursor = root
block :tmp:
  while (
    not (it_cursor == nil)):
    echo [it_cursor.s]
    it_cursor = it_cursor.ri
jt_cursor = root
block :tmp_1:
  while (
    not (jt_cursor == nil)):
    var ri_1_cursor
    ri_1_cursor = jt_cursor.ri
    echo [jt_cursor.s]
    jt_cursor = ri_1_cursor
-- end of expandArc ------------------------'''
"""

type
  Node = ref object
    le, ri: Node
    s: string

proc traverse(root: Node) =
  var it = root
  while it != nil:
    echo it.s
    it = it.ri

  var jt = root
  while jt != nil:
    let ri = jt.ri
    echo jt.s
    jt = ri

traverse(nil)

# XXX: This optimization is not sound