diff src/symbols.c @ 195:a2f645c6b9f8 r20-3b24

Import from CVS: tag r20-3b24
author cvs
date Mon, 13 Aug 2007 09:59:05 +0200
parents 3d6bfa290dbd
children e45d5e7c476e
line wrap: on
line diff
--- a/src/symbols.c	Mon Aug 13 09:58:32 2007 +0200
+++ b/src/symbols.c	Mon Aug 13 09:59:05 2007 +0200
@@ -1510,8 +1510,14 @@
   /* WARNING: This function can be called when current_buffer is 0
      and Vselected_console is Qnil, early in initialization. */
   struct console *dev;
+  Lisp_Object valcontents;
 
   CHECK_SYMBOL (sym);
+
+  valcontents = XSYMBOL (sym)->value;
+  if (!SYMBOL_VALUE_MAGIC_P (valcontents))
+    return valcontents;
+
   if (CONSOLEP (Vselected_console))
     dev = XCONSOLE (Vselected_console);
   else
@@ -1588,9 +1594,16 @@
   CHECK_SYMBOL (sym);
 
  retry:
-  reject_constant_symbols (sym, newval, 0,
-			   UNBOUNDP (newval) ? Qmakunbound : Qset);
   valcontents = XSYMBOL (sym)->value;
+  if (NILP (sym) || EQ (sym, Qt) || SYMBOL_VALUE_MAGIC_P (valcontents))
+    reject_constant_symbols (sym, newval, 0,
+			     UNBOUNDP (newval) ? Qmakunbound : Qset);
+  else
+    {
+      XSYMBOL (sym)->value = newval;
+      return newval;
+    }
+
  retry_2:
 
   if (SYMBOL_VALUE_MAGIC_P (valcontents))