summary refs log tree commit diff stats
path: root/tests/array/troofregression.nim
blob: 0b96123a4aa5514928c82f553455b4994ed31e82 (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
###############################
#### part from Arraymancer

type
  MetadataArray* = object
    data*: array[8, int]
    len*: int

# Commenting the converter removes the error "lib/system.nim(3536, 3) Error: for a 'var' type a variable needs to be passed"
converter toMetadataArray*(se: varargs[int]): MetadataArray {.inline.} =
  result.len = se.len
  for i in 0..<se.len:
    result.data[i] = se[i]


when NimVersion >= "0.17.3":
  type Index = int or BackwardsIndex
  template `^^`(s, i: untyped): untyped =
    when i is BackwardsIndex:
      s.len - int(i)
    else: i
else:
  type Index = int
  template `^^`(s, i: untyped): untyped =
    i

## With Nim devel from the start of the week (~Oct30) I managed to trigger "lib/system.nim(3536, 4) Error: expression has no address"
## but I can't anymore after updating Nim (Nov5)
## Now commenting this plain compiles and removes the error "lib/system.nim(3536, 3) Error: for a 'var' type a variable needs to be passed"
proc `[]`*(a: var MetadataArray, idx: Index): var int {.inline.} =
  a.data[a ^^ idx]


##############################
### Completely unrelated lib that triggers the issue

type
  MySeq[T] = ref object
    data: seq[T]

proc test[T](sx: MySeq[T]) =
  # Removing the backward index removes the error "lib/system.nim(3536, 3) Error: for a 'var' type a variable needs to be passed"
  echo sx.data[^1] # error here

let s = MySeq[int](data: @[1, 2, 3])
s.test()