Files
Nim/tests/stdlib
ee7 3b1a601fe1 sequtils: fix errors from strictFuncs use (#18998)
Nim 1.4.x compiled the below code without error when using
`--experimental:strictFuncs`

    import std/sequtils

    type Foo = ref object

    let foo1 = Foo()
    let foo2 = Foo()
    let foos = @[foo1, foo2]
    let fooTuples = @[(foo1, 1), (foo2, 2)]

    discard repeat(foo1, 3)
    discard zip(foos, foos)
    discard unzip(fooTuples)

However, since 2020-12-09, devel Nim produced errors like

    /tmp/bar.nim(11, 15) template/generic instantiation of `repeat` from here
    /foo/nim/pure/collections/sequtils.nim(172, 6) Error: 'repeat' can have side effects
    an object reachable from 'x' is potentially mutated
    /foo/nim/pure/collections/sequtils.nim(183, 15) the mutation is here
    /foo/nim/pure/collections/sequtils.nim(183, 15) is the statement that connected the mutation to the parameter

This commit reverts some `proc` to `func` changes so that code that:

- calls `repeat`, `zip`, or `unzip`
- and instantiates them with types containing `ref`

can once again be compiled with `strictFuncs`. Otherwise, a user might
be forced to drop or alter their `strictFuncs` use when upgrading from
Nim 1.4.x, or when writing new code that uses these procedures (at least
for now, with the current `strictFuncs` implementation).

This commit also adds tests to assert that the remaining funcs in this
module can be compiled with `strictFuncs` when used with types
containing `ref`.

The original batch of `proc` to `func` changes in `sequtils.nim` was in
commit 6f57ebae34, which was partially reverted in 38eb021f81.

See also: https://github.com/nim-lang/Nim/issues/16305
2021-10-16 11:25:05 +02:00
..
2021-09-20 09:50:20 +02:00
2020-12-27 14:45:57 +01:00
2020-10-29 18:12:14 +01:00
2020-11-13 16:15:13 +08:00
2020-12-28 14:13:21 +01:00
2020-11-05 14:00:49 +01:00
2021-03-23 10:49:02 +01:00
2021-05-07 17:40:16 -07:00
2021-01-07 19:16:26 +01:00
2020-12-28 14:13:21 +01:00
2020-12-28 14:13:21 +01:00
2021-01-05 20:51:51 +01:00
2021-07-27 09:36:19 +02:00
2021-07-17 07:54:47 +02:00
2020-12-28 14:13:21 +01:00
2020-12-28 14:13:21 +01:00
2021-03-26 13:05:51 +01:00
2021-04-06 16:21:58 +02:00
2021-08-19 11:35:40 +02:00
2020-12-28 14:13:21 +01:00
2020-12-29 13:27:08 +01:00
2021-07-05 10:12:58 -07:00
2020-11-23 19:53:57 +01:00
2020-12-27 14:45:57 +01:00
2019-05-16 21:06:04 +02:00
2021-09-29 09:32:39 +02:00
2020-11-24 19:06:41 +01:00
2020-12-28 14:13:21 +01:00
2020-12-28 14:13:21 +01:00
2021-01-22 19:51:11 +01:00
2021-02-06 17:33:11 +01:00
2020-10-18 12:57:13 -04:00
2021-02-22 19:58:37 +01:00
2021-10-06 13:53:01 +02:00
2021-03-08 10:39:39 +01:00
2021-06-16 11:31:20 +02:00
2021-08-12 09:21:01 -07:00
2018-12-11 21:23:21 +01:00
2021-08-23 00:13:39 +02:00
2021-09-02 12:10:14 +02:00
2020-11-24 19:06:41 +01:00
2021-07-19 12:43:31 +02:00
2020-12-28 14:13:21 +01:00
2021-02-09 13:04:36 +01:00
2020-12-28 14:13:21 +01:00
2021-07-18 15:16:26 +02:00
2020-12-28 14:13:21 +01:00
2021-04-09 11:51:51 +02:00
2020-07-12 03:31:03 -04:00
2020-12-28 14:13:21 +01:00
2018-04-30 11:16:56 +02:00
2020-12-28 14:13:21 +01:00