(Fdefvaralias): If the alias is bound and the target is not, set the
authorGlenn Morris <rgm@gnu.org>
Fri, 11 Apr 2008 03:41:34 +0000 (03:41 +0000)
committerGlenn Morris <rgm@gnu.org>
Fri, 11 Apr 2008 03:41:34 +0000 (03:41 +0000)
target's value to that of the alias.

src/ChangeLog
src/eval.c

index 385fe30..1bdc540 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-11  Glenn Morris  <rgm@gnu.org>
+
+       * eval.c (Fdefvaralias): If the alias is bound and the target is not,
+       set the target's value to that of the alias.
+
 2008-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * term.c (set_tty_color_mode): Left over typo.
index 62fe015..eca4642 100644 (file)
@@ -772,9 +772,10 @@ DEFUN ("defvaralias", Fdefvaralias, Sdefvaralias, 2, 3, 0,
        doc: /* Make NEW-ALIAS a variable alias for symbol BASE-VARIABLE.
 Aliased variables always have the same value; setting one sets the other.
 Third arg DOCSTRING, if non-nil, is documentation for NEW-ALIAS.  If it is
- omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
- or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
- itself an alias.
+omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
+or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
+itself an alias.  If NEW-ALIAS is bound, and BASE-VARIABLE is not,
+then the value of BASE-VARIABLE is set to that of NEW-ALIAS.
 The return value is BASE-VARIABLE.  */)
      (new_alias, base_variable, docstring)
      Lisp_Object new_alias, base_variable, docstring;
@@ -788,6 +789,12 @@ The return value is BASE-VARIABLE.  */)
     error ("Cannot make a constant an alias");
 
   sym = XSYMBOL (new_alias);
+  /* http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg00834.html
+     If n_a is bound, but b_v is not, set the value of b_v to n_a.
+     This is for the sake of define-obsolete-variable-alias and user
+     customizations.  */
+  if (NILP (Fboundp (base_variable)) && !NILP (Fboundp (new_alias)))
+    XSYMBOL(base_variable)->value = sym->value;
   sym->indirect_variable = 1;
   sym->value = base_variable;
   sym->constant = SYMBOL_CONSTANT_P (base_variable);