since the example code return value from global variable, instead
of first argument, the `n.len` is 1 which causes compiler crashes.
(cherry picked from commit f755e452d2)
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
* Fixed `strictFuncs` support for `std/pegs`
Enabled `std/pegs` in the `strictFuncs` import test.
Fixes#18057Fixes#16892
See #18111
* Rebased from `devel`
* Conditionally compile `std/pegs` in `koch`
This is for supporting `csources` bootstrap.
Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
* correct effect tracking for .borrowed procs [backport]
* progress
* fix error message in a test
* correctly fix it
Co-authored-by: narimiran <narimiran@disroot.org>
* fixes#18858 [backport]
* ensure async tests work with --experimental:strictEffects [backport]
* ensure async tests work with --experimental:strictEffects [backport]
* Fixes implicit and explicit generics
* moved block logic into 'maybeInstantiateGeneric'
* Added more tests
* Update compiler/semexprs.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Fix initrand to avoid random number sequences overlapping
* Minor fix
* Fix compile error on js backend
* Disable new test for js backend
* Minor fix
* tempfiles module uses random.initRand()
* Remove unused module import from lib/std/tempfiles.nim
* Initialize baseState in initRand()
* Run tests/stdlib/trandom.nim from tests/test_nimscript.nims
* baseState is initialized only with sysrand.urandom and quit if failed
* Add comments