* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
@ 2023-12-23 14:51 Aaron Jensen
2023-12-23 15:09 ` Eli Zaretskii
2023-12-23 15:21 ` Gerd Möllmann
0 siblings, 2 replies; 9+ messages in thread
From: Aaron Jensen @ 2023-12-23 14:51 UTC (permalink / raw)
To: 67991; +Cc: monnier
After commits:
0fde935b66e43e4d7ec137ba6195de993168587a
a63b206fbde2ead91f1053d80a275f8850e5ffce
boundp returns nil here, rather than t, like it used to:
(format-mode-line
'(:eval (let* ((some-var "some-value")
(_ (message "Bound: %S" (boundp 'some-var))))
(message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
This has an impact on a particular package I use for my modeline, which
can be worked around if this behavior is expected. It seemed a
significant chagne, so I wanted to report it, in case it was not expected.
In GNU Emacs 30.0.50 (build 1, aarch64-apple-darwin23.1.0, NS
appkit-2487.20 Version 14.1.1 (Build 23B2082)) of 2023-11-17 built on
Aarons-MacBook-Pro.local
Windowing system distributor 'Apple', version 10.3.2487
System Description: macOS 14.2.1
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
--infodir=/opt/homebrew/Cellar/emacs-plus@30/30.0.50/share/info/emacs
--prefix=/opt/homebrew/Cellar/emacs-plus@30/30.0.50 --with-xml2
--with-gnutls --with-native-compilation --without-compress-install
--without-dbus --without-imagemagick --with-modules --with-rsvg
--with-webp --with-ns --disable-ns-self-contained 'CFLAGS=-Os -w -pipe
-mmacosx-version-min=14
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk
-DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT'
'CPPFLAGS=-I/opt/homebrew/opt/zlib/include
-I/opt/homebrew/opt/jpeg/include -I/opt/homebrew/opt/icu4c/include
-isystem/opt/homebrew/include -F/opt/homebrew/Frameworks
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk'
'LDFLAGS=-L/opt/homebrew/opt/zlib/lib -L/opt/homebrew/opt/jpeg/lib
-L/opt/homebrew/opt/icu4c/lib -L/opt/homebrew/lib
-F/opt/homebrew/Frameworks -Wl,-headerpad_max_install_names
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk
-L/opt/homebrew/opt/libgccjit/lib''
Configured features:
ACL GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Org
Minor modes in effect:
windmove-mode: t
global-flycheck-mode: t
flycheck-mode: t
global-evil-mc-mode: t
evil-mc-mode: t
global-git-commit-mode: t
transient-posframe-mode: t
corfu-prescient-mode: t
corfu-history-mode: t
eval-sexp-fu-flash-mode: t
eros-mode: t
speed-of-thought-mode: t
global-evil-surround-mode: t
evil-surround-mode: t
tabspaces-mode: t
flyspell-mode: t
org-indent-mode: t
org-appear-mode: t
orgonomic-mode: t
org-superstar-mode: t
form-feed-mode: t
org-roam-db-autosync-mode: t
evil-org-mode: t
undo-fu-session-global-mode: t
undo-fu-session-mode: t
ws-butler-global-mode: t
ws-butler-mode: t
yas-global-mode: t
yas-minor-mode: t
vertico-prescient-mode: t
prescient-persist-mode: t
vertico-mouse-mode: t
vertico-mode: t
mini-frame-mode: t
better-jumper-mode: t
better-jumper-local-mode: t
ns-auto-titlebar-mode: t
global-anzu-mode: t
anzu-mode: t
which-key-posframe-mode: t
which-key-mode: t
gcmh-mode: t
xterm-mouse-mode: t
global-auto-revert-mode: t
save-place-mode: t
winner-mode: t
savehist-mode: t
delete-selection-mode: t
recentf-mode: t
repeat-mode: t
+popup-mode: t
evil-mode: t
evil-local-mode: t
server-mode: t
leader-key-leader-override-mode: t
global-leader-key-leader-override-mode: t
elpaca-use-package-mode: t
override-global-mode: t
global-display-line-numbers-mode: t
global-eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
prettify-symbols-mode: t
tab-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
window-divider-mode: t
minibuffer-regexp-mode: t
line-number-mode: t
auto-fill-function: #[128 \304\300\301%3#\207 [yas--auto-fill org-auto-fill-function :around nil apply] 5 advice]
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
abbrev-mode: t
Load-path shadows:
/Users/aaronjensen/.emacs.d/elpaca/builds/lispy/elpa hides /Users/aaronjensen/.emacs.d/elpaca/builds/ivy/elpa
Features:
(shadow sort mail-extr emacsbug evil-matchit-simple evil-matchit-prog
evil-matchit evil-matchit-sdk semantic/lex semantic/fw
evil-collection-help hippie-exp evil-collection-helpful helpful cc-langs
cc-vars cc-defs trace info-look elisp-refs hide-mode-line info
magit-patch magit-subtree magit-gitignore magit-ediff
evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff
ediff-help ediff-init ediff-util magit-extras vc-hg vc-bzr vc-src
vc-sccs vc-svn vc-cvs vc-rcs log-view bug-reference elpaca-log elpaca-ui
popup-mode-core windmove evil-terminal-cursor-changer color executable
flycheck evil-mc evil-mc-command-execute evil-mc-command-record
evil-mc-cursor-make evil-mc-region evil-mc-cursor-state evil-mc-undo
evil-mc-vars evil-mc-known-commands evil-mc-common magit-delta
xterm-color evil-collection-magit magit-submodule magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes
magit-worktree magit-tag magit-merge magit-branch magit-reset
magit-files magit-refs magit-status magit package url-handlers
magit-repos magit-apply magit-wip magit-log which-func magit-diff
smerge-mode diff git-commit log-edit pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process with-editor
magit-mode transient-posframe transient magit-git magit-base crm
vertico-directory cape corfu-prescient corfu-history corfu dtrt-indent
eval-sexp-fu eros lispyville lispy lispy-inline avy etags fileloop
evil-collection-edebug edebug lispy-tags mode-local zoutline elisp-def
ert ewoc evil-collection-xref xref f f-shortdoc sotlisp skeleton
elec-pair envrc inheritenv evil-surround evil-matchit-evil-setup
tabspaces dired-x vc vc-git diff-mode vc-dispatcher flyspell ispell
org-indent org-appear orgonomic org-superstar form-feed oc-basic ol-eww
eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect
gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr
pixel-fill kinsoku url-file svg dom browse-url gnus-group gnus-undo
gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7
nnoo parse-time gnus-spec gnus-int gnus-range message sendmail
yank-media rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mailabbrev gmm-utils mailheader gnus-win gnus
nnheader gnus-util mail-utils range ol-docview doc-view jka-compr
image-mode exif dired dired-loaddefs ol-bibtex bibtex iso8601 ol-bbdb
ol-w3m ol-doi org-link-doi org-download url-http url url-proxy
url-privacy url-expand url-methods url-history mailcap url-auth
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
url-cookie generate-lisp-file url-domsuf url-util url-gw nsm puny async
vulpea vulpea-meta vulpea-select vulpea-buffer vulpea-db s vulpea-utils
vulpea-note org-roam-migrate org-roam-log org-roam-mode org-roam-capture
org-roam-id org-roam-node org-roam-db emacsql-sqlite-builtin sqlite
org-roam-utils org-roam-compat org-roam org-mac-link org-goto
org-capture org-attach emacsql-sqlite emacsql-sqlite-common emacsql
emacsql-compiler magit-section cursor-sensor dash evil-org-agenda
evil-org imenu 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 org-agenda ox-ascii ox-gfm ox-md ox-html table ox-publish
ox org-element org-persist xdg org-id org-refile avl-tree generator
org-tempo tempo ob-shell shell org ob ob-tangle ob-ref ob-lob ob-table
ob-exp org-macro org-src ob-comint org-pcomplete pcomplete org-list
org-footnote org-faces org-entities noutline outline ob-emacs-lisp
ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys
oc org-loaddefs cal-menu calendar cal-loaddefs org-version org-compat
org-macs format-spec undo-fu-session ws-butler yasnippet
vertico-prescient prescient char-fold vertico-mouse vertico mini-frame
better-jumper ns-auto-titlebar evil-anzu anzu which-key-posframe
posframe evil-collection-which-key which-key gcmh help-fns radix-tree
cl-print xt-mouse autorevert filenotify saveplace winner hl-line
evil-collection-ibuffer ibuffer ibuffer-loaddefs savehist delsel
popup-mode-hacks evil-collection-debug debug backtrace find-func recentf
tree-widget repeat orderless popup-mode popup-mode-settings
evil-collection annalist evil-little-word cus-edit cus-start cus-load
wid-edit pp evil evil-integration evil-maps evil-commands reveal
evil-jumps evil-command-window evil-types evil-search evil-ex
evil-macros evil-repeat evil-states evil-core project advice evil-common
thingatpt rect evil-vars memoize nano-modeline nano-light-theme
face-remap nano-theme disp-table gcmh-autoloads copy-as-format-autoloads
pdf-tools-autoloads tablist-autoloads restclient-autoloads
vterm-autoloads dumb-jump-autoloads popup-autoloads haml-mode-autoloads
emmet-mode-autoloads terraform-mode-autoloads hcl-mode-autoloads
dockerfile-mode-autoloads yaml-mode-autoloads json-mode-autoloads
json-snatcher-autoloads grip-mode-autoloads lua-mode-autoloads
bundler-autoloads inf-ruby-autoloads ruby-refactor-autoloads
evil-ruby-text-objects-autoloads sotlisp-autoloads elisp-def-autoloads
lispyville-autoloads lispy-autoloads iedit-autoloads swiper-autoloads
ivy-autoloads zoutline-autoloads eros-autoloads eval-sexp-fu-autoloads
web-mode-autoloads ripgrep-capf-autoloads git-link-autoloads
consult-git-commit-autoloads git-timemachine-autoloads
magit-delta-autoloads xterm-color-autoloads prettier-autoloads
iter2-autoloads nvm-autoloads editorconfig-autoloads flycheck-autoloads
pkg-info-autoloads epl-autoloads lsp-ui-autoloads lsp-mode-autoloads
spinner-autoloads markdown-mode-autoloads denote-autoloads
imenu-list-autoloads org-superstar-autoloads ox-gfm-autoloads
org-pandoc-import-autoloads gnuplot-autoloads org-download-autoloads
async-autoloads org-journal-autoloads vulpea-autoloads
org-roam-autoloads emacsql-autoloads orgonomic-autoloads
org-drill-autoloads persist-autoloads org-appear-autoloads
org-mac-link-autoloads evil-org-autoloads
evil-terminal-cursor-changer-autoloads transient-posframe-autoloads
better-jumper-autoloads buffer-move-autoloads rotate-autoloads
mini-frame-autoloads embark-consult-autoloads embark-autoloads
consult-autoloads orderless-autoloads cape-autoloads
corfu-prescient-autoloads corfu-autoloads vertico-prescient-autoloads
vertico-autoloads prescient-autoloads tabspaces-autoloads
which-key-posframe-autoloads which-key-autoloads popup-mode-autoloads
hide-mode-line-autoloads evil-anzu-autoloads anzu-autoloads
titlecase-autoloads wgrep-autoloads yasnippet-autoloads
form-feed-autoloads drag-stuff-autoloads dtrt-indent-autoloads
ws-butler-autoloads evil-collection-autoloads annalist-autoloads
evil-mc-autoloads evil-numbers-autoloads speeddating-autoloads
evil-little-word-autoloads evil-matchit-autoloads
evil-nerd-commenter-autoloads evil-visualstar-autoloads
evil-surround-autoloads vundo-autoloads undo-fu-session-autoloads
ztree-autoloads dwim-shell-command-autoloads treemacs-tab-bar-autoloads
treemacs-magit-autoloads magit-autoloads git-commit-autoloads
magit-section-autoloads with-editor-autoloads treemacs-evil-autoloads
evil-autoloads goto-chg-autoloads treemacs-autoloads
ace-window-autoloads avy-autoloads pfuture-autoloads ht-autoloads
cfrs-autoloads all-the-icons-autoloads rainbow-mode-autoloads
posframe-autoloads ns-auto-titlebar-autoloads nano-modeline-autoloads
nano-theme-autoloads memoize-autoloads envrc-autoloads
inheritenv-autoloads helpful-autoloads f-autoloads elisp-refs-autoloads
s-autoloads dired-subtree-autoloads dired-hacks-utils-autoloads
dash-autoloads server pcase hydra lv url-parse auth-source eieio
eieio-core password-cache json map url-vars edmacro kmacro byte-opt
compdef derived leader-key bind-map no-littering compat
compdef-autoloads hydra-autoloads lv-autoloads leader-key-autoloads
bind-map-autoloads no-littering-autoloads compat-autoloads
elpaca-use-package use-package use-package-ensure use-package-delight
use-package-diminish use-package-bind-key bind-key easy-mmode
use-package-core elpaca-use-package-autoloads compile
text-property-search comint ansi-osc ansi-color ring time-date comp-run
cl-macs elpaca elpaca-process elpaca-autoloads comp cl-seq comp-cstr
comp-common warnings subr-x rx gv bytecomp byte-compile cl-extra
help-mode icons cl-loaddefs cl-lib display-line-numbers rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/ns-win ns-win ucs-normalize
mule-util term/common-win touch-screen tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine 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 emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns lcms2
multi-tty make-network-process native-compile emacs)
Memory information:
((conses 16 1715062 1710222) (symbols 48 59369 9) (strings 32 463445 162848)
(string-bytes 1 12748013) (vectors 16 187678) (vector-slots 8 3436760 1120751)
(floats 8 1816 4805) (intervals 56 40244 7368) (buffers 992 34))
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 14:51 bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Aaron Jensen
@ 2023-12-23 15:09 ` Eli Zaretskii
2023-12-23 15:21 ` Gerd Möllmann
1 sibling, 0 replies; 9+ messages in thread
From: Eli Zaretskii @ 2023-12-23 15:09 UTC (permalink / raw)
To: Aaron Jensen; +Cc: monnier, 67991
> Cc: monnier@iro.umontreal.ca
> From: Aaron Jensen <aaronjensen@gmail.com>
> Date: Sat, 23 Dec 2023 09:51:50 -0500
>
>
> After commits:
>
> 0fde935b66e43e4d7ec137ba6195de993168587a
> a63b206fbde2ead91f1053d80a275f8850e5ffce
>
> boundp returns nil here, rather than t, like it used to:
>
> (format-mode-line
> '(:eval (let* ((some-var "some-value")
> (_ (message "Bound: %S" (boundp 'some-var))))
> (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
If I evaluate this:
(let* ((some-var "some-value")
(_ (message "Bound: %S" (boundp 'some-var))))
(message "Var: %S, Bound: %S" some-var (boundp 'some-var)))
in *scratch*, I also get nil and nil, both in Emacs 29 and with the
latest master branch. So why would you expect to see t when you
evaluate this as part of format-mode-line? Or what am I missing?
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 14:51 bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Aaron Jensen
2023-12-23 15:09 ` Eli Zaretskii
@ 2023-12-23 15:21 ` Gerd Möllmann
2023-12-23 15:52 ` Aaron Jensen
1 sibling, 1 reply; 9+ messages in thread
From: Gerd Möllmann @ 2023-12-23 15:21 UTC (permalink / raw)
To: Aaron Jensen; +Cc: monnier, 67991
Aaron Jensen <aaronjensen@gmail.com> writes:
> After commits:
>
> 0fde935b66e43e4d7ec137ba6195de993168587a
> a63b206fbde2ead91f1053d80a275f8850e5ffce
>
> boundp returns nil here, rather than t, like it used to:
>
> (format-mode-line
> '(:eval (let* ((some-var "some-value")
> (_ (message "Bound: %S" (boundp 'some-var))))
> (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
>
> This has an impact on a particular package I use for my modeline, which
> can be worked around if this behavior is expected. It seemed a
> significant chagne, so I wanted to report it, in case it was not expected.
I don't know why that would have changed things with Stefan's commit,
but are your sure that some-var is declared special (has a defvar, for
instance)? When it is, boundp returns t here.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 15:21 ` Gerd Möllmann
@ 2023-12-23 15:52 ` Aaron Jensen
2023-12-23 16:13 ` Gerd Möllmann
2023-12-23 16:42 ` Eli Zaretskii
0 siblings, 2 replies; 9+ messages in thread
From: Aaron Jensen @ 2023-12-23 15:52 UTC (permalink / raw)
To: Gerd Möllmann; +Cc: monnier, 67991
On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann@gmail.com> wrote:
>
> Aaron Jensen <aaronjensen@gmail.com> writes:
>
> > After commits:
> >
> > 0fde935b66e43e4d7ec137ba6195de993168587a
> > a63b206fbde2ead91f1053d80a275f8850e5ffce
> >
> > boundp returns nil here, rather than t, like it used to:
> >
> > (format-mode-line
> > '(:eval (let* ((some-var "some-value")
> > (_ (message "Bound: %S" (boundp 'some-var))))
> > (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
> >
> > This has an impact on a particular package I use for my modeline, which
> > can be worked around if this behavior is expected. It seemed a
> > significant chagne, so I wanted to report it, in case it was not expected.
>
> I don't know why that would have changed things with Stefan's commit,
> but are your sure that some-var is declared special (has a defvar, for
> instance)? When it is, boundp returns t here.
It's not in the package in question. But even if I defvar w/o giving
it a value, it does not return t:
(defvar some-var)
(let* ((some-var "some-value")
(_ (message "Bound: %S" (boundp 'some-var))))
(message "Var: %S, Bound: %S" some-var (boundp 'some-var)))
(format-mode-line
'(:eval (let* ((some-var "some-value")
(_ (message "Bound: %S" (boundp 'some-var))))
(message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
The first returns t, the second does not.
As to your question, Eli, I don't know. If it shouldn't return nil
then I can report that downstream and they can fix it there.
Aaron
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 15:52 ` Aaron Jensen
@ 2023-12-23 16:13 ` Gerd Möllmann
2023-12-23 16:42 ` Eli Zaretskii
1 sibling, 0 replies; 9+ messages in thread
From: Gerd Möllmann @ 2023-12-23 16:13 UTC (permalink / raw)
To: Aaron Jensen; +Cc: monnier, 67991
Aaron Jensen <aaronjensen@gmail.com> writes:
> On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann@gmail.com> wrote:
>>
>> Aaron Jensen <aaronjensen@gmail.com> writes:
>>
>> > After commits:
>> >
>> > 0fde935b66e43e4d7ec137ba6195de993168587a
>> > a63b206fbde2ead91f1053d80a275f8850e5ffce
>> >
>> > boundp returns nil here, rather than t, like it used to:
>> >
>> > (format-mode-line
>> > '(:eval (let* ((some-var "some-value")
>> > (_ (message "Bound: %S" (boundp 'some-var))))
>> > (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
>> >
>> > This has an impact on a particular package I use for my modeline, which
>> > can be worked around if this behavior is expected. It seemed a
>> > significant chagne, so I wanted to report it, in case it was not expected.
>>
>> I don't know why that would have changed things with Stefan's commit,
>> but are your sure that some-var is declared special (has a defvar, for
>> instance)? When it is, boundp returns t here.
>
> It's not in the package in question.
It should have a defvar, to make sure that the binding of some-var in
the let* behaves as expected also when lexical-binding it t, which it is
in lisp-interaction-mode, for example.
> But even if I defvar w/o giving
> it a value, it does not return t:
That's strange, indeed:
(defvar some-var2)
=> some-var2
(special-variable-p 'some-var2)
=> nil
(defvar some-var3 nil)
=> some-var3
(special-variable-p 'some-var3)
=> t
Does someone know if that's intended for some reason?
Looks like a bug to me.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 15:52 ` Aaron Jensen
2023-12-23 16:13 ` Gerd Möllmann
@ 2023-12-23 16:42 ` Eli Zaretskii
2023-12-24 7:13 ` Gerd Möllmann
1 sibling, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2023-12-23 16:42 UTC (permalink / raw)
To: Aaron Jensen; +Cc: gerd.moellmann, monnier, 67991
> Cc: monnier@iro.umontreal.ca, 67991@debbugs.gnu.org
> From: Aaron Jensen <aaronjensen@gmail.com>
> Date: Sat, 23 Dec 2023 10:52:22 -0500
>
> On Sat, Dec 23, 2023 at 10:21 AM Gerd Möllmann <gerd.moellmann@gmail.com> wrote:
> >
> > Aaron Jensen <aaronjensen@gmail.com> writes:
> >
> > > After commits:
> > >
> > > 0fde935b66e43e4d7ec137ba6195de993168587a
> > > a63b206fbde2ead91f1053d80a275f8850e5ffce
> > >
> > > boundp returns nil here, rather than t, like it used to:
> > >
> > > (format-mode-line
> > > '(:eval (let* ((some-var "some-value")
> > > (_ (message "Bound: %S" (boundp 'some-var))))
> > > (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
> > >
> > > This has an impact on a particular package I use for my modeline, which
> > > can be worked around if this behavior is expected. It seemed a
> > > significant chagne, so I wanted to report it, in case it was not expected.
> >
> > I don't know why that would have changed things with Stefan's commit,
> > but are your sure that some-var is declared special (has a defvar, for
> > instance)? When it is, boundp returns t here.
>
> It's not in the package in question. But even if I defvar w/o giving
> it a value, it does not return t:
>
> (defvar some-var)
>
> (let* ((some-var "some-value")
> (_ (message "Bound: %S" (boundp 'some-var))))
> (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))
>
> (format-mode-line
> '(:eval (let* ((some-var "some-value")
> (_ (message "Bound: %S" (boundp 'some-var))))
> (message "Var: %S, Bound: %S" some-var (boundp 'some-var)))))
>
> The first returns t, the second does not.
This one will return t:
(format-mode-line
'(:eval (progn
(defvar some-var)
(let* ((some-var "some-value")
(_ (message "Bound: %S" (boundp 'some-var))))
(message "Var: %S, Bound: %S" some-var (boundp 'some-var))))))
> As to your question, Eli, I don't know. If it shouldn't return nil
> then I can report that downstream and they can fix it there.
Let's wait for Stefan to chime in, he made the change you blamed.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-23 16:42 ` Eli Zaretskii
@ 2023-12-24 7:13 ` Gerd Möllmann
2023-12-24 7:45 ` Eli Zaretskii
0 siblings, 1 reply; 9+ messages in thread
From: Gerd Möllmann @ 2023-12-24 7:13 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: monnier, Aaron Jensen, 67991
Eli Zaretskii <eliz@gnu.org> writes:
> This one will return t:
>
> (format-mode-line
> '(:eval (progn
> (defvar some-var)
> (let* ((some-var "some-value")
> (_ (message "Bound: %S" (boundp 'some-var))))
> (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))))
>
Indeed. Looking at Fdefvar, one can see that a "(defvar foo)" does this
when lexical-binding is t
/* A simple (defvar foo) with lexical scoping does "nothing" except
declare that var to be dynamically scoped *locally* (i.e. within
the current file or let-block). */
while it does nothing at all if lexical-binding is nil. Maybe defvar's
doc string could give some hint to that. This sentence at least is not
true for "(defvar SYMBOL)":
The ‘defvar’ form also declares the variable as "special",
so that it is always dynamically bound even if ‘lexical-binding’ is t.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
2023-12-24 7:13 ` Gerd Möllmann
@ 2023-12-24 7:45 ` Eli Zaretskii
2023-12-24 8:05 ` Gerd Möllmann
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2023-12-24 7:45 UTC (permalink / raw)
To: Gerd Möllmann; +Cc: monnier, aaronjensen, 67991
> From: Gerd Möllmann <gerd.moellmann@gmail.com>
> Cc: Aaron Jensen <aaronjensen@gmail.com>, monnier@iro.umontreal.ca,
> 67991@debbugs.gnu.org
> Date: Sun, 24 Dec 2023 08:13:39 +0100
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > This one will return t:
> >
> > (format-mode-line
> > '(:eval (progn
> > (defvar some-var)
> > (let* ((some-var "some-value")
> > (_ (message "Bound: %S" (boundp 'some-var))))
> > (message "Var: %S, Bound: %S" some-var (boundp 'some-var))))))
> >
>
> Indeed. Looking at Fdefvar, one can see that a "(defvar foo)" does this
> when lexical-binding is t
>
> /* A simple (defvar foo) with lexical scoping does "nothing" except
> declare that var to be dynamically scoped *locally* (i.e. within
> the current file or let-block). */
>
> while it does nothing at all if lexical-binding is nil. Maybe defvar's
> doc string could give some hint to that. This sentence at least is not
> true for "(defvar SYMBOL)":
>
> The ‘defvar’ form also declares the variable as "special",
> so that it is always dynamically bound even if ‘lexical-binding’ is t.
Thanks, I hope I clarified the doc string now.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-12-24 8:05 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-23 14:51 bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935 Aaron Jensen
2023-12-23 15:09 ` Eli Zaretskii
2023-12-23 15:21 ` Gerd Möllmann
2023-12-23 15:52 ` Aaron Jensen
2023-12-23 16:13 ` Gerd Möllmann
2023-12-23 16:42 ` Eli Zaretskii
2023-12-24 7:13 ` Gerd Möllmann
2023-12-24 7:45 ` Eli Zaretskii
2023-12-24 8:05 ` Gerd Möllmann
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).