From 08a74ab05a2dcca261fe6adaa839a936b5c123c0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Sun, 7 Aug 2022 10:52:16 +0200 Subject: [PATCH] Cease emitting negative file offsets for user variables 'User variables' were made obsolete in Emacs 24 along with user-variable-p; the sign of the position in (#$ . POS) hasn't mattered since. * lisp/emacs-lisp/bytecomp.el (byte-compile-output-docform): Don't emit negative position when doc string starts with `*`. * src/lread.c (get_lazy_string): Explain. --- lisp/emacs-lisp/bytecomp.el | 15 +++------------ src/lread.c | 4 +++- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index b1f4f01b3ae..d8a5dd20f6c 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2451,18 +2451,9 @@ list that represents a doc string reference. (let (position (print-symbols-bare t)) ; Possibly redundant binding. ;; Insert the doc string, and make it a comment with #@LENGTH. - (and (>= (nth 1 info) 0) - dynamic-docstrings - (progn - (setq position - (byte-compile-output-as-comment - (nth (nth 1 info) form) nil)) - ;; If the doc string starts with * (a user variable), - ;; negate POSITION. - (if (and (stringp (nth (nth 1 info) form)) - (> (length (nth (nth 1 info) form)) 0) - (eq (aref (nth (nth 1 info) form) 0) ?*)) - (setq position (- position))))) + (when (and (>= (nth 1 info) 0) dynamic-docstrings) + (setq position (byte-compile-output-as-comment + (nth (nth 1 info) form) nil))) (let ((print-continuous-numbering t) print-number-table diff --git a/src/lread.c b/src/lread.c index d16df32ca3e..ccccd79cd7c 100644 --- a/src/lread.c +++ b/src/lread.c @@ -3486,7 +3486,9 @@ get_lazy_string (Lisp_Object val) unibyte string. If it is actually a doc string, caller must make it multibyte. */ - /* Position is negative for user variables. */ + /* We used to emit negative positions for 'user variables' (whose doc + strings started with an asterisk); take the absolute value for + compatibility. */ EMACS_INT pos = eabs (XFIXNUM (XCDR (val))); struct saved_string *ss = &saved_strings[0]; struct saved_string *ssend = ss + ARRAYELTS (saved_strings); -- 2.39.2