diff src/doc.c @ 5206:39d74978fd32

Keep around file info for dumped functions and variables without docstrings. src/ChangeLog addition: 2010-04-17 Aidan Kehoe <kehoea@parhasard.net> * doc.c (Fdocumentation): If we have a zero length doc string in DOC, as may happen for undocumented compiled function objects which nonetheless have file information stored, return nil. (Fsnarf_documentation): DOC info existing for compiled functions without docstrings is perfectly legitimate, now the file is also used to store file names. * bytecode.c (set_compiled_function_documentation): Allow this function to set the documentation successfully for compiled function objects that don't currently have documentation; most relevant for functions without docstrings which have file information stored in DOC. lib-src/ChangeLog addition: 2010-04-17 Aidan Kehoe <kehoea@parhasard.net> * make-docfile.c (scan_lisp_file): Even if a function doesn't have a doc string, store its file name in DOC. lisp/ChangeLog addition: 2010-04-17 Aidan Kehoe <kehoea@parhasard.net> * loadup.el (load-history): Be a bit more discriminate in the entries we remove from load-history, only removing those where the information is entirely available from DOC. Fixes problems finding the files that dumped undocumented variables were loaded from, reported by Didier Verna. * loadhist.el (symbol-file): Correct a regexp here, I had forgotten to double a backslash.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 17 Apr 2010 10:40:03 +0100
parents 16112448d484
children 308d34e9f07d
line wrap: on
line diff
--- a/src/doc.c	Thu Apr 15 20:14:08 2010 -0500
+++ b/src/doc.c	Sat Apr 17 10:40:03 2010 +0100
@@ -613,7 +613,15 @@
       if (STRINGP (tem))
 	doc = tem;
       else if (NATNUMP (tem) || CONSP (tem))
-	doc = get_doc_string (tem);
+        {
+          doc = get_doc_string (tem);
+          /* We may have zero length strings in the docfile for file
+             information. */
+          if (STRINGP (doc) && 0 == XSTRING_LENGTH (doc))
+            {
+              return Qnil;
+            }
+        }
       else
         return Qnil;
     }
@@ -903,33 +911,24 @@
                          slots for it.  */
                       Lisp_Compiled_Function *f = XCOMPILED_FUNCTION (fun);
 
-		      /* This compiled-function object must have a
-			 slot for the docstring, since we've found a
-			 docstring for it.  Unless there were multiple
-			 definitions of it, and the latter one didn't
-			 have any doc, which is a legal if slightly
-			 bogus situation, so don't blow up. */
+		      /* If there were multiple definitions for this function,
+                         and the latter one didn't
+			 have any doc, warn and don't blow up. */
+                      Lisp_Object old =
+                        compiled_function_documentation (f);
+                      if (!ZEROP (old) && !NILP (old))
+                        {
+                          weird_doc (sym, "duplicate", "bytecode", pos);
+                          /* In the case of duplicate doc file entries,
+                             always take the later one.  But if the doc is
+                             not an int (a string, say) leave it alone. */
+                          if (!INTP (old))
+                            goto weird;
+                        }
 
-                      if (! (f->flags.documentationp))
-			{
-			  weird_doc (sym, "no doc slot", "bytecode", pos);
-			  goto weird;
-			}
-		      else
-			{
-			  Lisp_Object old =
-			    compiled_function_documentation (f);
-			  if (!ZEROP (old))
-			    {
-			      weird_doc (sym, "duplicate", "bytecode", pos);
-			      /* In the case of duplicate doc file entries,
-				 always take the later one.  But if the doc is
-				 not an int (a string, say) leave it alone. */
-			      if (!INTP (old))
-				goto weird;
-			    }
-			  set_compiled_function_documentation (f, offset);
-			}
+                      /* This may be a function or variable where we want
+                         to make the file name available. */
+                      set_compiled_function_documentation (f, offset);
                     }
                   else
                     {