[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/stream d77b733 09/36: Update stream.el to v2.0.2.
From: |
Stefan Monnier |
Subject: |
[elpa] externals/stream d77b733 09/36: Update stream.el to v2.0.2. |
Date: |
Tue, 1 Dec 2020 17:22:48 -0500 (EST) |
branch: externals/stream
commit d77b733a43b0646cbb2320ff3f2bfbfaeff6b764
Author: Nicolas Petton <nicolas@petton.fr>
Commit: Nicolas Petton <nicolas@petton.fr>
Update stream.el to v2.0.2.
* packages/stream/stream.el:
* packages/stream/tests/stream-tests.el: Update.
---
stream.el | 36 ++++++++++++++++++++++++------------
tests/stream-tests.el | 6 ++++++
2 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/stream.el b/stream.el
index 6b3fa74..6bbf99f 100644
--- a/stream.el
+++ b/stream.el
@@ -62,7 +62,7 @@
(defmacro stream-make (&rest body)
"Return a stream built from BODY.
-BODY must return nil or a cons cell, which cdr is itself a
+BODY must return nil or a cons cell whose cdr is itself a
stream."
(declare (debug t))
`(list ',stream--identifier (thunk-delay ,@body)))
@@ -98,7 +98,7 @@ SEQ can be a list, vector or string."
(cl-defmethod stream ((buffer buffer) &optional pos)
"Return a stream of the characters of the buffer BUFFER.
-BUFFER-OR-NAME may be a buffer or a string (buffer name).
+BUFFER may be a buffer or a string (buffer name).
The sequence starts at POS if non-nil, 1 otherwise."
(with-current-buffer buffer
(unless pos (setq pos (point-min)))
@@ -113,6 +113,15 @@ The sequence starts at POS if non-nil, 1 otherwise."
(char-after (point)))))
(stream buffer (1+ pos)))))
+(defun stream-regexp (buffer regexp)
+ (stream-make
+ (let (match)
+ (with-current-buffer buffer
+ (setq match (re-search-forward regexp nil t)))
+ (when match
+ (cons (match-data) (stream-regexp buffer regexp))
+ nil))))
+
(defun stream-range (&optional start end step)
"Return a stream of the integers from START to END, stepping by STEP.
If START is nil, it defaults to 0. If STEP is nil, it defaults to
@@ -191,7 +200,7 @@ This function will eagerly consume the entire stream."
(seq-take (seq-drop stream start) (- end start)))
(cl-defmethod seq-into-sequence ((stream stream))
- "Convert STREAM into a sequence"
+ "Convert STREAM into a sequence."
(let ((list))
(seq-doseq (elt stream)
(push elt list))
@@ -244,19 +253,22 @@ This function will eagerly consume the entire stream."
(stream-rest stream)))))
(cl-defmethod seq-map (function (stream stream))
- "Return a stream.
-The elements of the produced sequence consist of the application
-of FUNCTION to each element of STREAM."
- (if (stream-empty-p stream)
- stream
- (stream-cons
- (funcall function (stream-first stream))
- (seq-map function (stream-rest stream)))))
+ "Return a stream representing the mapping of FUNCTION over STREAM.
+The elements of the produced stream are the results of the
+applications of FUNCTION on each element of STREAM in succession."
+ (stream-make
+ ;; Avoid using `stream-empty-p', as it will consume the first element of the
+ ;; stream before iterating over the stream.
+ (let ((first (stream-first stream)))
+ (when first
+ (cons (funcall function first)
+ (seq-map function (stream-rest stream)))))))
(cl-defmethod seq-do (function (stream stream))
"Evaluate FUNCTION for each element of STREAM eagerly, and return nil.
-`seq-do' should never be used on infinite streams."
+`seq-do' should never be used on infinite streams without some
+kind of nonlocal exit."
(while (not (stream-empty-p stream))
(funcall function (stream-first stream))
(setq stream (stream-rest stream))))
diff --git a/tests/stream-tests.el b/tests/stream-tests.el
index a7cb727..0033ed7 100644
--- a/tests/stream-tests.el
+++ b/tests/stream-tests.el
@@ -168,5 +168,11 @@
(should (= (seq-length (seq-subseq (stream-range 2 10) 1 3)) 2))
(should (= (seq-elt (seq-subseq (stream-range 2 10) 1 3) 1) 4)))
+(ert-deftest stream-seq-map-should-not-consume-stream-elements ()
+ (let* (consumed
+ (stream (stream-cons (setq consumed t) (stream-empty))))
+ (seq-map #'identity stream)
+ (should-not consumed)))
+
(provide 'stream-tests)
;;; stream-tests.el ends here
- [elpa] externals/stream 8af657a 12/36: * packages/stream/stream.el (streamp): Tiny optimization., (continued)
- [elpa] externals/stream 8af657a 12/36: * packages/stream/stream.el (streamp): Tiny optimization., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 8239285 13/36: Fix compliler warnings in stream-tests.el, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 18146ee 04/36: * packages/stream/stream.el: Update stream.el to v 1.1.0., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 01fc059 03/36: * packages/stream/stream.el: Update stream to v 1.0.1., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 1a61660 11/36: * stream.el: Implement `seqp' instead of `seq-p', Stefan Monnier, 2020/12/01
- [elpa] externals/stream 5762f78 21/36: Pinpoint semantics of `seq-subseq's implementation for streams, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f384660 22/36: Add systematic tests against bogus element generation, Stefan Monnier, 2020/12/01
- [elpa] externals/stream ec86243 24/36: Some details in the documentation, Stefan Monnier, 2020/12/01
- [elpa] externals/stream b0c8949 28/36: Implement `seq-mapn' method for streams, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 7874a25 05/36: * packages/stream/tests/stream-tests.el: New tests., Stefan Monnier, 2020/12/01
- [elpa] externals/stream d77b733 09/36: Update stream.el to v2.0.2.,
Stefan Monnier <=
- [elpa] externals/stream fbe7ebd 06/36: Update stream.el to version 2.0.0, Stefan Monnier, 2020/12/01
- [elpa] externals/stream a8aa25c 07/36: * packages/stream/stream.el: Update stream.el to version 2.0.1., Stefan Monnier, 2020/12/01
- [elpa] externals/stream 2b2ba28 14/36: update stream.el to the latest version, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 00e523f 15/36: Add stream stream-delay and stream-of-directory-files, Stefan Monnier, 2020/12/01
- [elpa] externals/stream ac42cc1 18/36: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/01
- [elpa] externals/stream a36469b 17/36: Add some more basic stream operations, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f8e6639 20/36: * stream/stream.el (stream--generalizer): Accept more arguments, Stefan Monnier, 2020/12/01
- [elpa] externals/stream 873ee4e 23/36: Fix errors detected by tests added in last commit, Stefan Monnier, 2020/12/01
- [elpa] externals/stream cbf7e78 30/36: * stream/stream-x.el: Update copyright, Stefan Monnier, 2020/12/01
- [elpa] externals/stream f1fce5e 35/36: * packages/stream/stream.el: Bump version to 2.2.5., Stefan Monnier, 2020/12/01