summary refs log tree commit diff stats
path: root/tests/misc/theaproots.nim
blob: 1ea3c86b9749b3268b6b9d1026045debc37b48a9 (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
discard """
action: compile
"""

type
  Bar = object
    x: int

  Foo = object
    rheap: ref Bar
    rmaybe: ref Bar
    rstack: ref Bar
    list: seq[ref Bar]
    listarr: array[0..5, ref Bar]
    nestedtup: Tup
    inner: TInner
    inref: ref TInner

  TInner = object
    inref: ref Bar

  Tup = tuple
    tupbar: ref Bar
    inner: TInner

proc acc(x: var Foo): var ref Bar =
  result = x.rheap

proc test(maybeFoo: var Foo,
          maybeSeq: var seq[ref Bar],
          bars: var openarray[ref Bar],
          maybeTup: var Tup) =
  var bb: ref Bar
  maybeFoo.rmaybe = bb
  maybeFoo.list[3] = bb
  maybeFoo.listarr[3] = bb
  acc(maybeFoo) = bb

  var localFoo: Foo
  localFoo.rstack = bb
  localFoo.list[3] = bb
  localFoo.listarr[3] = bb
  acc(localFoo) = bb

  var heapFoo: ref Foo
  heapFoo.rheap = bb
  heapFoo.list[3] = bb
  heapFoo.listarr[3] = bb
  acc(heapFoo[]) = bb

  heapFoo.nestedtup.tupbar = bb
  heapFoo.nestedtup.inner.inref = bb
  heapFoo.inner.inref = bb
  heapFoo.inref.inref = bb

  var locseq: seq[ref Bar]
  locseq[3] = bb

  var locarr: array[0..4, ref Bar]
  locarr[3] = bb

  maybeSeq[3] = bb

  bars[3] = bb

  maybeTup[0] = bb

var
  ff: ref Foo
  tt: Tup
  gseq: seq[ref Bar]

new(ff)

test(ff[], gseq, gseq, tt)