diff src/lread.c @ 90260:0ca0d9181b5e

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-95 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 598-615) - Update from CVS - Remove lisp/toolbar directory - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 142-146) - Update from CVS
author Miles Bader <miles@gnu.org>
date Mon, 16 Jan 2006 06:59:21 +0000
parents 2d92f5c9d6ae 236b02d0dac9
children 7beb78bc1f8e
line wrap: on
line diff
--- a/src/lread.c	Wed Dec 28 07:22:57 2005 +0000
+++ b/src/lread.c	Mon Jan 16 06:59:21 2006 +0000
@@ -848,6 +848,11 @@
 If optional fifth arg MUST-SUFFIX is non-nil, insist on
  the suffix `.elc' or `.el'; don't accept just FILE unless
  it ends in one of those suffixes or includes a directory name.
+
+Loading a file records its definitions, and its `provide' and
+`require' calls, in an element of `load-history' whose
+car is the file name loaded.  See `load-history'.
+
 Return t if file exists.  */)
      (file, noerror, nomessage, nosuffix, must_suffix)
      Lisp_Object file, noerror, nomessage, nosuffix, must_suffix;
@@ -856,7 +861,7 @@
   register int fd = -1;
   int count = SPECPDL_INDEX ();
   Lisp_Object temp;
-  struct gcpro gcpro1;
+  struct gcpro gcpro1, gcpro2;
   Lisp_Object found, efound;
   /* 1 means we printed the ".el is newer" message.  */
   int newer = 0;
@@ -905,7 +910,8 @@
       int size = SBYTES (file);
       Lisp_Object tmp[2];
 
-      GCPRO1 (file);
+      found = Qnil;
+      GCPRO2 (file, found);
 
       if (! NILP (must_suffix))
 	{
@@ -994,6 +1000,8 @@
 	  struct stat s1, s2;
 	  int result;
 
+	  GCPRO2 (file, found);
+
 	  if (version < 0
 	      && ! (version = safe_to_load_p (fd)))
 	    {
@@ -1011,7 +1019,6 @@
 
 	  compiled = 1;
 
-	  GCPRO1 (efound);
 	  efound = ENCODE_FILE (found);
 
 #ifdef DOS_NT
@@ -1021,7 +1028,6 @@
 	  SSET (efound, SBYTES (efound) - 1, 0);
 	  result = stat ((char *)SDATA (efound), &s2);
 	  SSET (efound, SBYTES (efound) - 1, 'c');
-	  UNGCPRO;
 
 	  if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime)
 	    {
@@ -1031,12 +1037,13 @@
 	      /* If we won't print another message, mention this anyway.  */
 	      if (!NILP (nomessage))
 		{
-		  Lisp_Object file;
-		  file = Fsubstring (found, make_number (0), make_number (-1));
+		  Lisp_Object msg_file;
+		  msg_file = Fsubstring (found, make_number (0), make_number (-1));
 		  message_with_string ("Source file `%s' newer than byte-compiled file",
-				       file, 1);
+				       msg_file, 1);
 		}
 	    }
+	  UNGCPRO;
 	}
     }
   else
@@ -1055,12 +1062,12 @@
 	}
     }
 
+  GCPRO2 (file, found);
+
 #ifdef WINDOWSNT
   emacs_close (fd);
-  GCPRO1 (efound);
   efound = ENCODE_FILE (found);
   stream = fopen ((char *) SDATA (efound), fmode);
-  UNGCPRO;
 #else  /* not WINDOWSNT */
   stream = fdopen (fd, fmode);
 #endif /* not WINDOWSNT */
@@ -1087,7 +1094,6 @@
 	message_with_string ("Loading %s...", file, 1);
     }
 
-  GCPRO1 (file);
   record_unwind_protect (load_unwind, make_save_value (stream, 0));
   record_unwind_protect (load_descriptor_unwind, load_descriptor_list);
   specbind (Qload_file_name, found);
@@ -1096,8 +1102,9 @@
     = Fcons (make_number (fileno (stream)), load_descriptor_list);
   load_in_progress++;
   if (! version || version >= 22)
-    readevalloop (Qget_file_char, stream, file, Feval,
-		  0, Qnil, Qnil, Qnil, Qnil);
+    readevalloop (Qget_file_char, stream,
+		  (! NILP (Vpurify_flag) ? file : found),
+		  Feval, 0, Qnil, Qnil, Qnil, Qnil);
   else
     {
       /* We can't handle a file which was compiled with
@@ -4017,7 +4024,7 @@
   Vafter_load_alist = Qnil;
 
   DEFVAR_LISP ("load-history", &Vload_history,
-	       doc: /* Alist mapping source file names to symbols and features.
+	       doc: /* Alist mapping file names to symbols and features.
 Each alist element is a list that starts with a file name,
 except for one element (optional) that starts with nil and describes
 definitions evaluated from buffers not visiting files.
@@ -4026,7 +4033,10 @@
 `(defun . FUNCTION)', `(autoload . SYMBOL)', and `(t . SYMBOL)'.
 An element `(t . SYMBOL)' precedes an entry `(defun . FUNCTION)',
 and means that SYMBOL was an autoload before this file redefined it
-as a function.  */);
+as a function.
+
+For a preloaded file, the file name recorded is relative to the main Lisp
+directory.  These names are converted to absolute by `file-loadhist-lookup'.  */);
   Vload_history = Qnil;
 
   DEFVAR_LISP ("load-file-name", &Vload_file_name,