1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-07 04:10:27 -08:00

Port to platforms where char * has top bit set

This fixes a five-year-old FIXME comment.  Although I don’t know
of a platform where this is a problem in practice, better safe
than sorry.
* src/doc.c (Fdocumentation): If SUBRP, simply use doc as integer,
as it is now an integer, not char *.
(store_function_docstring): Offset is now EMACS_INT, not ptrdiff_t;
this is a file offset and EMACS_INT is better if --with-wide-int.
If SUBRP, simply store the offset rather than negating it and
converting it to char *.
* src/lisp.h (struct Lisp_Subr.doc): Now EMACS_INT, not char *.
This commit is contained in:
Paul Eggert 2016-06-14 12:19:36 -07:00
parent 7f35d5cbaf
commit c5461d03a4
2 changed files with 4 additions and 16 deletions

View file

@ -339,16 +339,7 @@ string is passed through `substitute-command-keys'. */)
if (CONSP (fun) && EQ (XCAR (fun), Qmacro))
fun = XCDR (fun);
if (SUBRP (fun))
{
if (XSUBR (fun)->doc == 0)
return Qnil;
/* FIXME: This is not portable, as it assumes that string
pointers have the top bit clear. */
else if ((intptr_t) XSUBR (fun)->doc >= 0)
doc = build_string (XSUBR (fun)->doc);
else
doc = make_number ((intptr_t) XSUBR (fun)->doc);
}
doc = make_number (XSUBR (fun)->doc);
else if (COMPILEDP (fun))
{
if ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) <= COMPILED_DOC_STRING)
@ -473,7 +464,7 @@ aren't strings. */)
/* Scanning the DOC files and placing docstring offsets into functions. */
static void
store_function_docstring (Lisp_Object obj, ptrdiff_t offset)
store_function_docstring (Lisp_Object obj, EMACS_INT offset)
{
/* Don't use indirect_function here, or defaliases will apply their
docstrings to the base functions (Bug#2603). */
@ -502,10 +493,7 @@ store_function_docstring (Lisp_Object obj, ptrdiff_t offset)
/* Lisp_Subrs have a slot for it. */
else if (SUBRP (fun))
{
intptr_t negative_offset = - offset;
XSUBR (fun)->doc = (char *) negative_offset;
}
XSUBR (fun)->doc = offset;
/* Bytecode objects sometimes have slots for it. */
else if (COMPILEDP (fun))

View file

@ -1752,7 +1752,7 @@ struct Lisp_Subr
short min_args, max_args;
const char *symbol_name;
const char *intspec;
const char *doc;
EMACS_INT doc;
};
enum char_table_specials