]> git.eshelyaron.com Git - emacs.git/commitdiff
Change criteria for non-exit cualse: car s to or a bind*.
authorRichard Stallman <rms@gnu.org>
Sat, 15 Feb 2025 11:40:35 +0000 (06:40 -0500)
committerEshel Yaron <me@eshelyaron.com>
Tue, 18 Feb 2025 08:43:18 +0000 (09:43 +0100)
* lisp/emacs-lisp/cond-star.el (cond*-non-exit-clause-p):
Don't check for keywords; a clause is non-exit if it
starts with t or with a bind*.

(cherry picked from commit f3ef16f86ffbb0ab5b76fa11e85eda5b1eff4b4b)

lisp/emacs-lisp/cond-star.el

index e0d4c594741e587dde01d8d6ac377b30aae32707..18a1c344860093796ea6f57d2ce2bcdced7498bd 100644 (file)
@@ -47,22 +47,21 @@ A `cond*' construct is a series of clauses, and a clause
 normally has the form (CONDITION BODY...).
 
 CONDITION can be a Lisp expression, as in `cond'.
-Or it can be one of `(pcase* PATTERN DATUM)',
-`(bind* BINDINGS...)', or `(match* PATTERN DATUM)',
-
-`(pcase* PATTERN DATUM)' means to match DATUM against the
-pattern PATTERN, using the same pattern syntax as `pcase'.
-The condition counts as true if PATTERN matches DATUM.
+Or it can be one of`(bind* BINDINGS...)', `(match* PATTERN DATUM)',
+or `(pcase* PATTERN DATUM)',
 
 `(bind* BINDINGS...)' means to bind BINDINGS (as if they were in `let*')
-for the body of the clause.  As a condition, it counts as true
-if the first binding's value is non-nil.  All the bindings are made
-unconditionally for whatever scope they cover.
+for the body of the clause, and all subsequent clauses, since the `bind*'
+clause is always a non-exit clause.  As a condition, it counts as true
+and runs the body of the clause if the first binding's value is non-nil.
 
-`(match* PATTERN DATUM)' is an alternative to `pcase*' that uses another
-syntax for its patterns, see `match*'.
+`(match* PATTERN DATUM)' means to match DATUM against the pattern PATTERN
+For its patterns, see `match*'.
+The condition counts as true if PATTERN matches DATUM.
 
-See `match*' for documentation of the patterns for use in such clauses.
+`(pcase* PATTERN DATUM)' means to match DATUM against the
+pattern PATTERN, using the same pattern syntax as `pcase'.
+The condition counts as true if PATTERN matches DATUM.
 
 When a clause's condition is true, and it exits the `cond*'
 or is the last clause, the value of the last expression
@@ -71,7 +70,7 @@ in its body becomes the return value of the `cond*' construct.
 Non-exit clause:
 
 If a clause has only one element, or if its first element is
-a `bind*' clause, this clause never exits the `cond*' construct.
+t or a `bind*' clause, this clause never exits the `cond*' construct.
 Instead, control always falls through to the next clause (if any).
 All bindings made in CONDITION for the BODY of the non-exit clause
 are passed along to the rest of the clauses in this `cond*' construct.
@@ -151,10 +150,9 @@ ATOM (meaning any other kind of non-list not described above)
       (and (cdr-safe clause)
            ;; Starts with t.
            (or (eq (car clause) t)
-               ;; Begins with keyword.
-               (keywordp (car clause))))
-      ;; Ends with keyword.
-      (keywordp (car (last clause)))))
+               ;; Starts with a `bind*' pseudo-form.
+               (and (consp (car clause))
+                    (eq (caar clause) 'bind*))))))
 
 (defun cond*-non-exit-clause-substance (clause)
   "For a non-exit cond* clause CLAUSE, return its substance.