diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2016-06-14 11:46:30 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-06-14 12:21:00 -0700 |
commit | 7f35d5cbaf055dddcf0489a6f6a46df7ddaeeaf4 (patch) | |
tree | 05f14fed6b802043127ab5dfda073fea0860a98e /src/doc.c | |
parent | 61cfd6acfe099bae4b743665d0a10c2ba55e7ff2 (diff) | |
download | emacs-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.c | 20 |
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. */ |