]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't use negative positions for docstrings
authorStefan Kangas <stefankangas@gmail.com>
Thu, 23 Jan 2025 23:16:08 +0000 (00:16 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sat, 25 Jan 2025 17:43:29 +0000 (18:43 +0100)
These were used for user-variables (doc starts with a '*'), but we don't
use that convention any more.  On my machine, there are no docstrings
starting with a '*' in etc/DOC.

* src/doc.c (Fsnarf_documentation): Never use negative positions.
(get_doc_string): Don't use eabs; position must now be positive, and all
callers are verified to do that.

(cherry picked from commit c7f6da7a4141a9f3492b8dbb0c1de710bd4757fa)

src/doc.c

index d16d3d5186e76dfde801d1c5bd19f0db525cb647..0ce1274fe12ccad7e56823c5b0cdf1472a556a12 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -96,9 +96,6 @@ close_file_unwind_android_fd (void *ptr)
    If it is an integer, use that position in the standard DOC file.
    If it is (FILE . INTEGER), use FILE as the file name
    and INTEGER as the position in that file.
-   But if INTEGER is negative, make it positive.
-   (A negative integer is used for user variables, so we can distinguish
-   them without actually fetching the doc string.)
 
    If the location does not point to the beginning of a docstring
    (e.g. because the file has been modified and the location is stale),
@@ -130,7 +127,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte)
   else
     return Qnil;
 
-  EMACS_INT position = eabs (XFIXNUM (pos));
+  EMACS_INT position = XFIXNUM (pos);
 
   if (!STRINGP (dir))
     return Qnil;
@@ -192,7 +189,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte)
      P points beyond the data just read.  */
 
   p = get_doc_string_buffer;
-  while (1)
+  while (true)
     {
       ptrdiff_t space_left = (get_doc_string_buffer_size - 1
                              - (p - get_doc_string_buffer));
@@ -508,10 +505,7 @@ That file is found in `../etc' now; later, when the dumped Emacs is run,
 the same file name is found in the `doc-directory'.  */)
   (Lisp_Object filename)
 {
-  doc_fd fd;
   char buf[1024 + 1];
-  int filled;
-  EMACS_INT pos;
   Lisp_Object sym;
   char *p, *name;
   char const *dirname;
@@ -555,7 +549,7 @@ the same file name is found in the `doc-directory'.  */)
       Vbuild_files = Fpurecopy (Vbuild_files);
     }
 
-  fd = doc_open (name, O_RDONLY, 0);
+  doc_fd fd = doc_open (name, O_RDONLY, 0);
   if (!doc_fd_p (fd))
     {
       int open_errno = errno;
@@ -568,8 +562,8 @@ the same file name is found in the `doc-directory'.  */)
   record_unwind_protect_ptr (close_file_unwind_android_fd, &fd);
 #endif /* !USE_ANDROID_ASSETS */
   Vdoc_file_name = filename;
-  filled = 0;
-  pos = 0;
+  int filled = 0;
+  EMACS_INT pos = 0;
   while (true)
     {
       if (filled < 512)
@@ -609,15 +603,13 @@ the same file name is found in the `doc-directory'.  */)
              /* Attach a docstring to a variable?  */
              if (p[1] == 'V')
                {
-                 /* Install file-position as variable-documentation property
-                    and make it negative for a user-variable
-                    (doc starts with a `*').  */
+                 /* Install file-position as variable-documentation
+                    property.  */
                   if ((!NILP (Fboundp (sym))
                       || !NILP (Fmemq (sym, delayed_init)))
                       && strncmp (end, "\nSKIP", 5))
                     Fput (sym, Qvariable_documentation,
-                          make_fixnum ((pos + end + 1 - buf)
-                                       * (end[1] == '*' ? -1 : 1)));
+                          make_fixnum (pos + end + 1 - buf));
                }
 
              /* Attach a docstring to a function?  */