123456789101112131415161718192021222324252627282930313233343536 |
- discard """
- targets: "c cpp"
- matrix: "--gc:refc; --gc:arc"
- """
- # bug #1833
- iterator myitems*[T](a: var seq[T]): var T {.inline.} =
- ## iterates over each item of `a` so that you can modify the yielded value.
- var i = 0
- let L = len(a)
- while i < L:
- yield a[i]
- inc(i)
- doAssert(len(a) == L, "the length of the seq changed while iterating over it")
- # Works fine
- var xs = @[1,2,3]
- for x in myitems(xs):
- inc x
- # Tuples don't work
- var ys = @[(1,"a"),(2,"b"),(3,"c")]
- for y in myitems(ys):
- inc y[0]
- # bug #16331
- type T1 = tuple[a, b: int]
- proc p(b: bool): string =
- var x: T1 = (10, 20)
- x = if b: (x.b, x.a) else: (-x.b, -x.a)
- $x
- assert p(false) == "(a: -20, b: -10)"
- assert p(true) == "(a: 20, b: 10)"
|