diff options
| author | Nicolas Petton | 2016-12-16 11:18:04 +0100 |
|---|---|---|
| committer | Nicolas Petton | 2016-12-16 11:22:00 +0100 |
| commit | fb2fdb1435d2520c1cbf2a3d6a53128512a38458 (patch) | |
| tree | 3c62d01dcc3c4970eb9c8d0caf07a4666a8e3d21 | |
| parent | cdf5340f51d4346c276102331e3ed29561753b26 (diff) | |
| download | emacs-fb2fdb1435d2520c1cbf2a3d6a53128512a38458.tar.gz emacs-fb2fdb1435d2520c1cbf2a3d6a53128512a38458.zip | |
Make seq-into return the sequence when no conversion needed
* lisp/emacs-lisp/seq.el (seq-into): Do not convert the sequence when
no conversion is needed.
* test/lisp/emacs-lisp/seq-tests.el (test-seq-into-and-identity): Add
a regression test checking for identity.
| -rw-r--r-- | lisp/emacs-lisp/seq.el | 28 | ||||
| -rw-r--r-- | test/lisp/emacs-lisp/seq-tests.el | 8 |
2 files changed, 30 insertions, 6 deletions
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el index 9890e60614e..74510244be7 100644 --- a/lisp/emacs-lisp/seq.el +++ b/lisp/emacs-lisp/seq.el | |||
| @@ -179,9 +179,7 @@ Return a list of the results. | |||
| 179 | \(fn FUNCTION SEQUENCES...)" | 179 | \(fn FUNCTION SEQUENCES...)" |
| 180 | (let ((result nil) | 180 | (let ((result nil) |
| 181 | (sequences (seq-map (lambda (s) | 181 | (sequences (seq-map (lambda (s) |
| 182 | (if (listp s) | 182 | (seq-into s 'list)) |
| 183 | s | ||
| 184 | (seq-into s 'list))) | ||
| 185 | (cons sequence sequences)))) | 183 | (cons sequence sequences)))) |
| 186 | (while (not (memq nil sequences)) | 184 | (while (not (memq nil sequences)) |
| 187 | (push (apply function (seq-map #'car sequences)) result) | 185 | (push (apply function (seq-map #'car sequences)) result) |
| @@ -275,9 +273,9 @@ of sequence." | |||
| 275 | TYPE can be one of the following symbols: vector, string or | 273 | TYPE can be one of the following symbols: vector, string or |
| 276 | list." | 274 | list." |
| 277 | (pcase type | 275 | (pcase type |
| 278 | (`vector (vconcat sequence)) | 276 | (`vector (seq--into-vector sequence)) |
| 279 | (`string (concat sequence)) | 277 | (`string (seq--into-string sequence)) |
| 280 | (`list (append sequence nil)) | 278 | (`list (seq--into-list sequence)) |
| 281 | (_ (error "Not a sequence type name: %S" type)))) | 279 | (_ (error "Not a sequence type name: %S" type)))) |
| 282 | 280 | ||
| 283 | (cl-defgeneric seq-filter (pred sequence) | 281 | (cl-defgeneric seq-filter (pred sequence) |
| @@ -514,6 +512,24 @@ Signal an error if SEQUENCE is empty." | |||
| 514 | (null list)) | 512 | (null list)) |
| 515 | 513 | ||
| 516 | 514 | ||
| 515 | (defun seq--into-list (sequence) | ||
| 516 | "Concatenate the elements of SEQUENCE into a list." | ||
| 517 | (if (listp sequence) | ||
| 518 | sequence | ||
| 519 | (append sequence nil))) | ||
| 520 | |||
| 521 | (defun seq--into-vector (sequence) | ||
| 522 | "Concatenate the elements of SEQUENCE into a vector." | ||
| 523 | (if (vectorp sequence) | ||
| 524 | sequence | ||
| 525 | (vconcat sequence))) | ||
| 526 | |||
| 527 | (defun seq--into-string (sequence) | ||
| 528 | "Concatenate the elements of SEQUENCE into a string." | ||
| 529 | (if (stringp sequence) | ||
| 530 | sequence | ||
| 531 | (concat sequence))) | ||
| 532 | |||
| 517 | (defun seq--activate-font-lock-keywords () | 533 | (defun seq--activate-font-lock-keywords () |
| 518 | "Activate font-lock keywords for some symbols defined in seq." | 534 | "Activate font-lock keywords for some symbols defined in seq." |
| 519 | (font-lock-add-keywords 'emacs-lisp-mode | 535 | (font-lock-add-keywords 'emacs-lisp-mode |
diff --git a/test/lisp/emacs-lisp/seq-tests.el b/test/lisp/emacs-lisp/seq-tests.el index fc65c9834d6..a7a43471de3 100644 --- a/test/lisp/emacs-lisp/seq-tests.el +++ b/test/lisp/emacs-lisp/seq-tests.el | |||
| @@ -391,5 +391,13 @@ Evaluate BODY for each created sequence. | |||
| 391 | (should (equal (seq-mapn #'+ '(3 4 5 7) l1) | 391 | (should (equal (seq-mapn #'+ '(3 4 5 7) l1) |
| 392 | '(4 5 6 8))))) | 392 | '(4 5 6 8))))) |
| 393 | 393 | ||
| 394 | (ert-deftest test-seq-into-and-identity () | ||
| 395 | (let ((lst '(1 2 3)) | ||
| 396 | (vec [1 2 3]) | ||
| 397 | (str "foo bar")) | ||
| 398 | (should (eq (seq-into lst 'list) lst)) | ||
| 399 | (should (eq (seq-into vec 'vector) vec)) | ||
| 400 | (should (eq (seq-into str 'string) str)))) | ||
| 401 | |||
| 394 | (provide 'seq-tests) | 402 | (provide 'seq-tests) |
| 395 | ;;; seq-tests.el ends here | 403 | ;;; seq-tests.el ends here |