summaryrefslogtreecommitdiff
path: root/src/doc.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2016-06-14 11:46:30 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2016-06-14 12:21:00 -0700
commit7f35d5cbaf055dddcf0489a6f6a46df7ddaeeaf4 (patch)
tree05f14fed6b802043127ab5dfda073fea0860a98e /src/doc.c
parent61cfd6acfe099bae4b743665d0a10c2ba55e7ff2 (diff)
downloademacs-7f35d5cbaf055dddcf0489a6f6a46df7ddaeeaf4.tar.gz
Remove recursion from store_function_docstring
* src/doc.c (store_function_docstring): Refactor to avoid the need for C-level recursion.
Diffstat (limited to 'src/doc.c')
-rw-r--r--src/doc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/doc.c b/src/doc.c
index 017dd173d0a..7107580cf8b 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -481,15 +481,10 @@ store_function_docstring (Lisp_Object obj, ptrdiff_t offset)
/* The type determines where the docstring is stored. */
- /* Lisp_Subrs have a slot for it. */
- if (SUBRP (fun))
- {
- intptr_t negative_offset = - offset;
- XSUBR (fun)->doc = (char *) negative_offset;
- }
-
/* If it's a lisp form, stick it in the form. */
- else if (CONSP (fun))
+ if (CONSP (fun) && EQ (XCAR (fun), Qmacro))
+ fun = XCDR (fun);
+ if (CONSP (fun))
{
Lisp_Object tem;
@@ -503,8 +498,13 @@ store_function_docstring (Lisp_Object obj, ptrdiff_t offset)
correctness is quite delicate. */
XSETCAR (tem, make_number (offset));
}
- else if (EQ (tem, Qmacro))
- store_function_docstring (XCDR (fun), offset);
+ }
+
+ /* Lisp_Subrs have a slot for it. */
+ else if (SUBRP (fun))
+ {
+ intptr_t negative_offset = - offset;
+ XSUBR (fun)->doc = (char *) negative_offset;
}
/* Bytecode objects sometimes have slots for it. */