unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#54639: 26.1; (not (string-empty-p nil)) returns true
@ 2022-03-30 16:20 Ernesto Alfonso
  2022-03-31 11:26 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 2+ messages in thread
From: Ernesto Alfonso @ 2022-03-30 16:20 UTC (permalink / raw)
  To: 54639


The expression (not (string-empty-p nil)) returns true. This is very
conuterintuitive: nil is as "empty" a value as there is! Some of the
more reasonable alternatives I can think of in order of preference are:

1. (string-empty-p nil) simply returns t
2. (string-empty-p nil) raises a type error
3. subr-x.el provides a separate string-null-or-empty-p function



In GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
 of 2019-09-22, modified by Debian built on x86-grnet-01
Windowing system distributor 'The X.Org Foundation', version 11.0.12004000
System Description:	Debian GNU/Linux 10 (buster)

Recent messages:
nil [2 times]
Quit
uncompressing subr-x.el.gz...done
Note: file is write protected
scroll-down-command: Beginning of buffer [11 times]
Mark saved where search started
killed: (string-empty-p sip-autosend-message)
Mark set [2 times]
Making completion list...

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --enable-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --build
 x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd
 --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --with-x=yes
 --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2
 -fdebug-prefix-map=/build/emacs-StqULU/emacs-26.1+1=. -fstack-protector-strong
 -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 THREADS LIBSYSTEMD LCMS2

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: IELM

Minor modes in effect:
  shell-dirtrack-mode: t
  diff-auto-refine-mode: t
  text-scale-mode: t
  indent-on-save-mode: 0
  global-erjoalgo-command-mode: t
  erjoalgo-command-mode: t
  show-paren-mode: t
  global-text-scale-mode: t
  autobuild-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.24/slime-tests hides /home/ealfonso/.emacs.d/elpa/slime-20191224.2328/slime-tests
/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.24/slime-autoloads hides /home/ealfonso/.emacs.d/elpa/slime-20191224.2328/slime-autoloads
/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.24/slime hides /home/ealfonso/.emacs.d/elpa/slime-20191224.2328/slime
/home/ealfonso/.emacs.d/elpa/autobuild-20200209.2005/autobuild hides /home/ealfonso/git/dotemacs/lisp/core/autobuild
/home/ealfonso/.emacs.d/elpa/s-20180406.808/s hides /home/ealfonso/git/dotemacs/lisp/libs/s
/home/ealfonso/.emacs.d/elpa/dash-20191109.1327/dash hides /home/ealfonso/git/dotemacs/lisp/libs/dash
/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.24/contrib/slime-cl-indent hides /home/ealfonso/git/dotemacs/lisp/libs/slime-cl-indent
/home/ealfonso/.emacs.d/elpa/babel-20181201.919/babel hides /home/ealfonso/git/babel/babel
/home/ealfonso/.emacs.d/elpa/let-alist-1.0.6/let-alist hides /usr/share/emacs/26.1/lisp/emacs-lisp/let-alist

Features:
(shadow emacsbug ielm eieio-opt speedbar sb-image ezimage dframe
help-fns radix-tree cl-print legalese finder skeleton mhtml-mode
css-mode color eww url-queue shr svg xml js imenu cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
sgml-mode dom flyspell ispell animate sort python tramp-sh tramp
tramp-compat tramp-loaddefs trampver ucs-normalize shell mailalias
mail-extr rfc2368 browse-url qp gnus-ml disp-table nndraft nnmh nnfolder
utf-7 bbdb-gnus network-stream nsm starttls gnus-agent gnus-srvr
gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view
mml-smime smime dig nntp gnus-cache sh-script smie executable misearch
multi-isearch dired-aux ffap vc-git diff-mode face-remap diary-lib
diary-loaddefs cal-iso org-rmail org-mhe org-irc org-info org-gnus nnir
gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source tls gnutls utf7 netrc nnoo parse-time gnus-spec gnus-int
gnus-range gnus-win org-docview doc-view jka-compr image-mode org-bibtex
bibtex org-bbdb org-w3m org-agenda files-x tmp-completions tetris-o-1
beeper translation babel mm-url url url-proxy url-privacy url-expand
url-methods url-history mailcap gnus nnheader wid-edit wm-windows
slime-fancy slime-trace-dialog slime-fontifying-fu slime-package-fu
slime-references slime-compiler-notes-tree slime-scratch
slime-presentations bridge slime-macrostep macrostep slime-mdot-fu
slime-enclosing-context slime-fuzzy slime-fancy-trace
slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc
slime-repl elp slime-parse slime hi-lock company-oddmuse
company-keywords company-etags company-gtags company-dabbrev-code
company-dabbrev company-files company-capf company-cmake company-xcode
company-clang company-semantic company-eclim company-template
company-bbdb elec-pair lisp-mnt gud apropos compile etags xref project
arc-mode archive-mode cl ox-texinfo ox-odt rng-loc rng-uri rng-parse
rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok
nxml-util ox-latex ox-icalendar ox-html table ox-ascii ox-publish ox
org-crypt org-element avl-tree generator org org-macro org-footnote
org-pcomplete pcomplete org-list org-faces org-entities noutline outline
org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table
ob-keys ob-exp ob-comint comint ring ob-core ob-eval org-compat org-macs
org-loaddefs cal-menu calendar cal-loaddefs erc-goodies erc erc-backend
erc-compat thingatpt bbdb-mua bbdb-com crm bbdb-message sendmail message
rmc puny dired dired-loaddefs format-spec rfc822 mml mml-sec epa derived
epg gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader bbdb bbdb-site timezone
websocket url-cookie url-domsuf url-util bindat selcand proxy-mode
project-opener org-omnibar erjoalgo-command-mode command-mode-commands
anonymizer genpass ert pp ewoc debug flycheck cl-extra ansi-color json
map find-func help-mode rx subr-x header2 sticky-windows company edmacro
kmacro pcase dedicated dash-functional plusx my-emacs-settings paren
server isearch-fast-reverse buttons zoom-global easy-mmode quick-yes
advice goto-last-change autobuild-common-rules autobuild f dash s
finder-inf slime-autoloads info package easymenu epg-config url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache url-vars seq byte-opt gv bytecomp byte-compile cconv
cl-loaddefs cl-lib time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 1037404 79976)
 (symbols 48 63949 2)
 (miscs 40 856 1109)
 (strings 32 168803 4766)
 (string-bytes 1 5624278)
 (vectors 16 92002)
 (vector-slots 8 2066993 159212)
 (floats 8 615 891)
 (intervals 56 17949 134)
 (buffers 992 61))





^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#54639: 26.1; (not (string-empty-p nil)) returns true
  2022-03-30 16:20 bug#54639: 26.1; (not (string-empty-p nil)) returns true Ernesto Alfonso
@ 2022-03-31 11:26 ` Lars Ingebrigtsen
  0 siblings, 0 replies; 2+ messages in thread
From: Lars Ingebrigtsen @ 2022-03-31 11:26 UTC (permalink / raw)
  To: Ernesto Alfonso; +Cc: 54639

Ernesto Alfonso <erjoalgo@gmail.com> writes:

> The expression (not (string-empty-p nil)) returns true. This is very
> conuterintuitive: nil is as "empty" a value as there is!

But nil isn't a string, and the function is only (meant to be) valid for
strings.  It "works" for symbols by accident.

> Some of the more reasonable alternatives I can think of in order of
> preference are:
>
> 1. (string-empty-p nil) simply returns t
> 2. (string-empty-p nil) raises a type error

We can't change how an established function works -- that would break
people's code.

> 3. subr-x.el provides a separate string-null-or-empty-p function

That would be just (zerop (length OBJECT)), which doesn't quite seem
worth having a function when the function name is longer than the
expression it replaces.  (And it would be misleading to have the
function name start with string- since it works on other things, too.)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-03-31 11:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-30 16:20 bug#54639: 26.1; (not (string-empty-p nil)) returns true Ernesto Alfonso
2022-03-31 11:26 ` Lars Ingebrigtsen

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).