]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/nadvice.el (advice--make-docstring): Try harder to find
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 20 Mar 2014 16:00:17 +0000 (12:00 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 20 Mar 2014 16:00:17 +0000 (12:00 -0400)
the docstring of functions advised before dumping.
* src/doc.c (store_function_docstring): Warn when we don't know where to
put a docstring.
(Fsubstitute_command_keys): Don't advertise the fact that
text-properties are dropped, since we think it's a bug that we'll fix
in 24.5.

Fixes: debbugs:16993
lisp/ChangeLog
lisp/emacs-lisp/nadvice.el
src/ChangeLog
src/doc.c

index 72dc441d1f9a7acb11ee84e5f27f7d91812183c8..8b93411269ff7cc496f70c6f05854b487878120f 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-20  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emacs-lisp/nadvice.el (advice--make-docstring): Try harder to find
+       the docstring of functions advised before dumping (bug#16993).
+
 2014-03-19  Stefan-W. Hahn  <stefan.hahn@s-hahn.de>  (tiny change)
 
        * ps-print.el (ps-generate-postscript-with-faces):
index f480d17557ca0325567b20243bfb0f733dfed1fc..0e2536f81792f54a5a3ffb07123d07dfaab55ce6 100644 (file)
@@ -74,12 +74,19 @@ Each element has the form (WHERE BYTECODE STACK) where:
 
 (defun advice--make-docstring (function)
   "Build the raw docstring for FUNCTION, presumably advised."
-  (let ((flist (indirect-function function))
-        (docstring nil))
+  (let* ((flist (indirect-function function))
+         (docfun nil)
+         (docstring nil))
     (if (eq 'macro (car-safe flist)) (setq flist (cdr flist)))
     (while (advice--p flist)
       (let ((bytecode (aref flist 1))
+            (doc (aref flist 4))
             (where nil))
+        ;; Hack attack!  For advices installed before calling
+        ;; Snarf-documentation, the integer offset into the DOC file will not
+        ;; be installed in the "core unadvised function" but in the advice
+        ;; object instead!  So here we try to undo the damage.
+        (if (integerp doc) (setq docfun flist))
         (dolist (elem advice--where-alist)
           (if (eq bytecode (cadr elem)) (setq where (car elem))))
         (setq docstring
@@ -101,8 +108,9 @@ Each element has the form (WHERE BYTECODE STACK) where:
                "\n")))
       (setq flist (advice--cdr flist)))
     (if docstring (setq docstring (concat docstring "\n")))
-    (let* ((origdoc (unless (eq function flist) ;Avoid inf-loops.
-                      (documentation flist t)))
+    (unless docfun (setq docfun flist))
+    (let* ((origdoc (unless (eq function docfun) ;Avoid inf-loops.
+                      (documentation docfun t)))
            (usage (help-split-fundoc origdoc function)))
       (setq usage (if (null usage)
                       (let ((arglist (help-function-arglist flist)))
index 93d1ba247b1c45cc773d974c916659165798b6de..f67923bf417fbe2b8fcbef31989cf60525e8f670 100644 (file)
@@ -1,5 +1,11 @@
 2014-03-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * doc.c (store_function_docstring): Warn when we don't know where to
+       put a docstring.
+       (Fsubstitute_command_keys): Don't advertise the fact that
+       text-properties are dropped, since we think it's a bug that we'll fix
+       in 24.5.
+
        * frame.h (SET_FRAME_VISIBLE): Keep frame_garbaged up to date.
        * xterm.c (handle_one_xevent) <MapNotify>: Don't garbage the frame.
        * frame.c (frame_garbaged): Make "docstring" more precise.
index a42874f45032ad9414b4994c4bd0ff22012a7938..7e693165c6fd53fca76085853ae7715d94d6bdee 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -535,6 +535,9 @@ store_function_docstring (Lisp_Object obj, ptrdiff_t offset)
         docstring, since we've found a docstring for it.  */
       if ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_DOC_STRING)
        ASET (fun, COMPILED_DOC_STRING, make_number (offset));
+      else
+       message ("No docstring slot for %s",
+                SYMBOLP (obj) ? SDATA (SYMBOL_NAME (obj)) : "<anonymous>");
     }
 }
 
@@ -707,7 +710,7 @@ as the keymap for future \\=\\[COMMAND] substrings.
 thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ into the output.
 
 Return the original STRING if no substitutions are made.
-Otherwise, return a new string, without any text properties.  */)
+Otherwise, return a new string.  */)
   (Lisp_Object string)
 {
   char *buf;