* bug#30749: 26.0.91; (cl-)case is confused when a nil atom is used instead of a keylist
@ 2018-03-08 10:28 Alex Bennée
2018-03-08 11:11 ` Noam Postavsky
0 siblings, 1 reply; 4+ messages in thread
From: Alex Bennée @ 2018-03-08 10:28 UTC (permalink / raw)
To: 30749
I got confused why my case statement was failing as I'd used the second
form assuming that having nil as an atom would work. I'm not sure why
the quoting fixed it but it's certainly a confusing inconsistency. The
following behaviour shows up on emacs -Q:
(require 'cl)
(case nil
((nil) "nil")
((t) "default"))
"nil"
(case nil
(nil "nil")
(t "default"))
"default"
(case nil
('nil "nil")
('t "default"))
"nil"
(case t
('nil "nil")
('t "default"))
"default"
I think this is probably fixable with just making the docstring clearer
as the results of handling the duel atom/list of nil might have
unexpected results.
In GNU Emacs 26.0.91 (build 16, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
of 2018-03-06 built on zen
Repository revision: 0efe0bd233de20bfb5bd9d06b255fc8ecf04602b
Windowing system distributor 'The X.Org Foundation', version 11.0.11804000
System Description: Ubuntu 16.04.3 LTS
--
Alex Bennée
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#30749: 26.0.91; (cl-)case is confused when a nil atom is used instead of a keylist
2018-03-08 10:28 bug#30749: 26.0.91; (cl-)case is confused when a nil atom is used instead of a keylist Alex Bennée
@ 2018-03-08 11:11 ` Noam Postavsky
2018-03-08 11:34 ` Alex Bennée
0 siblings, 1 reply; 4+ messages in thread
From: Noam Postavsky @ 2018-03-08 11:11 UTC (permalink / raw)
To: Alex Bennée; +Cc: 30749
Alex Bennée <alex.bennee@linaro.org> writes:
> I got confused why my case statement was failing as I'd used the second
> form assuming that having nil as an atom would work. I'm not sure why
> the quoting fixed it but it's certainly a confusing inconsistency.
'nil is the same as (quote nil)
> I think this is probably fixable with just making the docstring clearer
> as the results of handling the duel atom/list of nil might have
> unexpected results.
So just add a "non-nil" perhaps?
--- i/lisp/emacs-lisp/cl-macs.el
+++ w/lisp/emacs-lisp/cl-macs.el
@@ -763,7 +763,7 @@ cl-case
"Eval EXPR and choose among clauses on that value.
Each clause looks like (KEYLIST BODY...). EXPR is evaluated and compared
against each key in each KEYLIST; the corresponding BODY is evaluated.
-If no clause succeeds, cl-case returns nil. A single atom may be used in
+If no clause succeeds, cl-case returns nil. A single non-nil atom may be used in
place of a KEYLIST of one atom. A KEYLIST of t or `otherwise' is
allowed only in the final clause, and matches if no other keys match.
Key values are compared by `eql'.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#30749: 26.0.91; (cl-)case is confused when a nil atom is used instead of a keylist
2018-03-08 11:11 ` Noam Postavsky
@ 2018-03-08 11:34 ` Alex Bennée
2018-03-10 22:57 ` Noam Postavsky
0 siblings, 1 reply; 4+ messages in thread
From: Alex Bennée @ 2018-03-08 11:34 UTC (permalink / raw)
To: Noam Postavsky; +Cc: 30749
Noam Postavsky <npostavs@gmail.com> writes:
> Alex Bennée <alex.bennee@linaro.org> writes:
>
>> I got confused why my case statement was failing as I'd used the second
>> form assuming that having nil as an atom would work. I'm not sure why
>> the quoting fixed it but it's certainly a confusing inconsistency.
>
> 'nil is the same as (quote nil)
Ahh so ends up as a list containing nil?
>
>> I think this is probably fixable with just making the docstring clearer
>> as the results of handling the duel atom/list of nil might have
>> unexpected results.
>
> So just add a "non-nil" perhaps?
>
> --- i/lisp/emacs-lisp/cl-macs.el
> +++ w/lisp/emacs-lisp/cl-macs.el
> @@ -763,7 +763,7 @@ cl-case
> "Eval EXPR and choose among clauses on that value.
> Each clause looks like (KEYLIST BODY...). EXPR is evaluated and compared
> against each key in each KEYLIST; the corresponding BODY is evaluated.
> -If no clause succeeds, cl-case returns nil. A single atom may be used in
> +If no clause succeeds, cl-case returns nil. A single non-nil atom may be used in
> place of a KEYLIST of one atom. A KEYLIST of t or `otherwise' is
> allowed only in the final clause, and matches if no other keys match.
> Key values are compared by `eql'.
Works for me.
--
Alex Bennée
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-03-10 22:57 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-08 10:28 bug#30749: 26.0.91; (cl-)case is confused when a nil atom is used instead of a keylist Alex Bennée
2018-03-08 11:11 ` Noam Postavsky
2018-03-08 11:34 ` Alex Bennée
2018-03-10 22:57 ` Noam Postavsky
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).