summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBasil L. Contovounesios <basil@contovou.net>2026-02-20 19:15:06 +0100
committerBasil L. Contovounesios <basil@contovou.net>2026-02-21 14:46:21 +0100
commitd3a84021dbe48dba63b52ef7665651e0cf02e915 (patch)
tree6faa36cca3fb3bf45984ec65d2cf8a4593b1e613
parent330cc0ddcc11749dcfdff52047a7bb99d5271ecf (diff)
No longer mark -cycle as pureexternals/dash
See https://bugs.gnu.org/80456. This is similar but not identical to #405 and https://bugs.gnu.org/64127 in that it involves a problematic compile-time constant produced from a pure function: (--map (-take 5 it) (-split-at 5 (-cycle '(1 2 3)))) => dev/examples.el: Error: List contains a loop: (3 1 2 3 1 . #2) * dash.el (-cycle): No longer mark as pure. * NEWS.md: Announce change.
-rw-r--r--NEWS.md9
-rw-r--r--dash.el2
2 files changed, 9 insertions, 2 deletions
diff --git a/NEWS.md b/NEWS.md
index 9375c5c..0f5d12d 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -6,6 +6,13 @@ See the end of the file for license conditions.
## Change log
+### From 2.20.0 to ?.?.?
+
+#### Fixes
+
+- The `-cycle` function is no longer marked as `pure`, as it returns a
+ copy of its argument (#405).
+
### From 2.19.1 to 2.20.0
#### Deprecations
@@ -42,7 +49,7 @@ See the end of the file for license conditions.
immutable constant, and thus unsafe to modify destructively. The
functions in question are: `-clone`, `-cons*`, `-drop-last`,
`-interleave`, `-interpose`, `-iota`, `-non-nil`, `-repeat`,
- `-slice`, `-snoc`, `-split-at`, `-take`, `-take-last`.
+ `-slice`, `-snoc`, `-split-at`, `-take`, `-take-last` (#405).
#### New features
diff --git a/dash.el b/dash.el
index ea7fece..41d1e53 100644
--- a/dash.el
+++ b/dash.el
@@ -1893,7 +1893,7 @@ LISTS, it is generally recommended to use `-unzip-lists' instead."
"Return an infinite circular copy of LIST.
The returned list cycles through the elements of LIST and repeats
from the beginning."
- (declare (pure t) (side-effect-free t))
+ (declare (side-effect-free t))
;; Also works with sequences that aren't lists.
(let ((newlist (append list ())))
(nconc newlist newlist)))