changeset 47022:d2259df6cb09

(Fdefvar, Fdefconst, Fdefvaralias): Record variables in load history as (defvar . VAR). (Fdefvar): Don't record in load history if no initial value. (Qdefvar): New variable. (syms_of_eval): Init and staticpro it.
author Richard M. Stallman <rms@gnu.org>
date Sat, 24 Aug 2002 03:19:23 +0000
parents 3bd4234e0844
children bcd10150f172
files src/eval.c
diffstat 1 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c	Sat Aug 24 03:17:18 2002 +0000
+++ b/src/eval.c	Sat Aug 24 03:19:23 2002 +0000
@@ -87,7 +87,7 @@
 int gcpro_level;
 #endif
 
-Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
+Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun, Qdefvar;
 Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
 Lisp_Object Qand_rest, Qand_optional;
 Lisp_Object Qdebug_on_error;
@@ -731,7 +731,7 @@
   sym->indirect_variable = 1;
   sym->value = aliased;
   sym->constant = SYMBOL_CONSTANT_P (aliased);
-  LOADHIST_ATTACH (symbol);
+  LOADHIST_ATTACH (Fcons (Qdefvar, symbol));
   if (!NILP (docstring))
     Fput (symbol, Qvariable_documentation, docstring);
 
@@ -777,14 +777,12 @@
 	    tem = Fpurecopy (tem);
 	  Fput (sym, Qvariable_documentation, tem);
 	}
-      LOADHIST_ATTACH (sym);
+      LOADHIST_ATTACH (Fcons (Qdefvar, sym));
     }
   else
-    /* A (defvar <var>) should not take precedence in the load-history over
-       an earlier (defvar <var> <val>), so only add to history if the default
-       value is still unbound.  */
-    if (NILP (tem))
-      LOADHIST_ATTACH (sym);
+    /* Simple (defvar <var>) should not count as a definition at all.
+       It could get in the way of other definitions, and unloading this
+       package could try to make the variable unbound.  */
     
   return sym;
 }
@@ -817,7 +815,7 @@
 	tem = Fpurecopy (tem);
       Fput (sym, Qvariable_documentation, tem);
     }
-  LOADHIST_ATTACH (sym);
+  LOADHIST_ATTACH (Fcons (Qdefvar, sym));
   return sym;
 }
 
@@ -3309,6 +3307,9 @@
   Qdefun = intern ("defun");
   staticpro (&Qdefun);
 
+  Qdefvar = intern ("defvar");
+  staticpro (&Qdefvar);
+
   Qand_rest = intern ("&rest");
   staticpro (&Qand_rest);