unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* 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

* bug#67991: 30.0.50; boundp always returns nil in format-mode-line with let* after 0fde935
  2023-12-24  7:45         ` Eli Zaretskii
@ 2023-12-24  8:05           ` Gerd Möllmann
  0 siblings, 0 replies; 9+ messages in thread
From: Gerd Möllmann @ 2023-12-24  8:05 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, aaronjensen, 67991

Eli Zaretskii <eliz@gnu.org> writes:

> Thanks, I hope I clarified the doc string now.

LGTM. Thanks!





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