* Add sink and lent to critbits
* Remove lent for pairs
I guess lent doesn't work well inside tuples
* Remove lent from template in critbits
Apparently this also doesn't work, because some checks failed
* Update lists.nim
* Update tlists.nim
* removed check `if b.tail != nil`
The tail of the list being null it is still possible to retrieve its end by going through all nodes from the head. So checking for null from `b.tail` is unnecessary. However, setting `a.tail = b.tail` only if `a.head != nil`, so you don't break a good list with an already broken one.
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
* deprecate sequtils.delete and add an overload with saner semantics
* AssertionDefect => IndexDefect
* improve tsequtils
* add tests; use splice in js for optimization
* CIs: attempt to use csources_v1
* also updated the BSDs
* also updated azure pipelines
* std modules should not itself use the 'std/' import dir...
* compiler has to be careful with std/ for v1 booting
* use sink and lent in deques
* Update lib/pure/collections/deques.nim
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
* Various changes to `lists` (RFC #303)
* Removing a non-element is no-op; better tests
* Remove preserves cycles; add appendMove alias; tests.
* Return value for (singly linked) `lists.remove`
* More test for lists.remove
* Moved `lists.append` to the end of the file to see all `add` definitions
* Disable testing js for now
* Use workaround for swap js bug
* Smaller diff
* Undo "silent" deprecation of append
* Correct typo in changelog
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Remove `appendMoved`
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
* Don't remove appendMoved
Co-authored-by: Clyybber <darkmine956@gmail.com>
Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
Previously, compiling a file containing just `import critbits` with
`nim c --experimental:strictFuncs` would produce the following error:
critbits.nim(529, 6) Error: 'toCritBitTree' can have side effects
This was introduced by 2aed418698 (#16564).
Fixes: #16873