Don't use negative positions for docstrings

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.
This commit is contained in:
Stefan Kangas 2025-01-24 00:16:08 +01:00
parent ed5067e689
commit c7f6da7a41

View file

@ -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? */