diff src/symbols.c @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents 4103f0995bd7
children 1ce6082ce73f
line wrap: on
line diff
--- a/src/symbols.c	Mon Aug 13 09:00:04 2007 +0200
+++ b/src/symbols.c	Mon Aug 13 09:02:59 2007 +0200
@@ -328,7 +328,6 @@
   return (make_int (hash));
 }
 
-#if 0 /* Emacs 19.34 */
 int
 hash_string (CONST Bufbyte *ptr, Bytecount len)
 {
@@ -345,26 +344,6 @@
     }
   return hash & 07777777777;
 }
-#endif
-
-/* derived from hashpjw, Dragon Book P436. */
-int
-hash_string (CONST Bufbyte *ptr, Bytecount len)
-{
-  CONST Bufbyte *p = ptr;
-  int hash = 0, g;
-  Bytecount count = len;
-
-  while (count-- > 0)
-    {
-      hash = (hash << 4) + *p++;
-      if (g = (hash & 0xf0000000)) {
-	hash = hash ^ (g >> 24);
-	hash = hash ^ g;
-      }
-    }
-  return hash & 07777777777;
-}
 
 void
 map_obarray (Lisp_Object obarray,
@@ -457,9 +436,7 @@
 
 static void set_up_buffer_local_cache (Lisp_Object sym, 
 				       struct symbol_value_buffer_local *bfwd,
-				       struct buffer *buf,
-				       Lisp_Object new_alist_el,
-				       int set_it_p);
+				       struct buffer *buf);
 
 DEFUN ("boundp", Fboundp, 1, 1, 0, /*
 T if SYMBOL's value is not void.
@@ -499,22 +476,26 @@
      type and make nil, t, and all keywords have that same magic
      constant_symbol value.  This test is awfully specific about what is
      constant and what isn't.  --Stig */
-  return
-    NILP (sym) ||
-    EQ (sym, Qt) ||
-    (SYMBOL_VALUE_MAGIC_P (val) &&
-     (XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_OBJECT_FORWARD ||
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SPECIFIER_FORWARD ||
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_FIXNUM_FORWARD ||
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_BOOLEAN_FORWARD ||
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_CURRENT_BUFFER_FORWARD ||
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SELECTED_CONSOLE_FORWARD))
+  return (NILP (sym) || EQ (sym, Qt)
+	  || (SYMBOL_VALUE_MAGIC_P (val)
+	      && (XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_OBJECT_FORWARD ||
+		  XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_SPECIFIER_FORWARD ||
+		  XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_FIXNUM_FORWARD ||
+		  XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_BOOLEAN_FORWARD ||
+		  XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_CURRENT_BUFFER_FORWARD ||
+		  XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+		  SYMVAL_CONST_SELECTED_CONSOLE_FORWARD))
 #if 0
-    /* #### - This is disabled until a new magic symbol_value for
-       constants is added */
-    || SYMBOL_IS_KEYWORD (sym)
+	      /* #### - This is disabled until a new magic symbol_value for
+		 constants is added */
+	      || SYMBOL_IS_KEYWORD (sym)
 #endif
-    ;
+	      );
 }
 
 /* We are setting SYM's value slot (or function slot, if FUNCTION_P is
@@ -532,13 +513,18 @@
      : fetch_value_maybe_past_magic (sym, follow_past_lisp_magic));
 
   if (SYMBOL_VALUE_MAGIC_P (val) &&
-      XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SPECIFIER_FORWARD)
+      XSYMBOL_VALUE_MAGIC_TYPE (val) ==
+      SYMVAL_CONST_SPECIFIER_FORWARD)
     signal_simple_error ("Use `set-specifier' to change a specifier's value",
 			 sym);
 
   if (symbol_is_constant (sym, val))
-    signal_error (Qsetting_constant,
-		  UNBOUNDP (newval) ? list1 (sym) : list2 (sym, newval));
+    {
+      signal_error (Qsetting_constant,
+		    ((UNBOUNDP (newval))
+		     ? list1 (sym)
+		     : list2 (sym, newval)));
+    }
 }
 
 /* Verify that it's ok to make SYM buffer-local.  This rejects
@@ -1298,11 +1284,9 @@
 static void
 set_up_buffer_local_cache (Lisp_Object sym, 
 			   struct symbol_value_buffer_local *bfwd,
-			   struct buffer *buf,
-			   Lisp_Object new_alist_el,
-			   int set_it_p)
+			   struct buffer *buf)
 {
-  Lisp_Object new_val;
+  Lisp_Object new_alist_el, new_val;
 
   if (!NILP (bfwd->current_buffer)
       && buf == XBUFFER (bfwd->current_buffer))
@@ -1313,10 +1297,7 @@
   write_out_buffer_local_cache (sym, bfwd);
 
   /* Retrieve the new alist element and new value. */
-  if (NILP (new_alist_el)
-      && set_it_p)
   new_alist_el = buffer_local_alist_element (buf, sym, bfwd);
-
   if (NILP (new_alist_el))
     new_val = bfwd->default_value;
   else
@@ -1388,15 +1369,14 @@
 	     will do this.  It doesn't hurt to do it whenever
 	     BUF == current_buffer, so just go ahead and do that. */
 	  if (buf == current_buffer)
-	    set_up_buffer_local_cache (sym, bfwd, buf, Qnil, 0);
+	    set_up_buffer_local_cache (sym, bfwd, buf);
 	}
     }
 }
 
 static Lisp_Object
 find_symbol_value_1 (Lisp_Object sym, struct buffer *buf,
-		     struct console *con, int swap_it_in,
-		     Lisp_Object symcons, int set_it_p)
+		     struct console *con, int swap_it_in)
 {
   Lisp_Object valcontents;
 
@@ -1417,7 +1397,6 @@
 
     case SYMVAL_VARALIAS:
       sym = follow_varalias_pointers (sym, Qt /* #### kludge */);
-      symcons = Qnil;
       /* presto change-o! */
       goto retry;
 
@@ -1429,7 +1408,7 @@
 
 	if (swap_it_in)
 	  {
-	    set_up_buffer_local_cache (sym, bfwd, buf, symcons, set_it_p);
+	    set_up_buffer_local_cache (sym, bfwd, buf);
 	    valcontents = bfwd->current_value;
 	  }
 	else
@@ -1437,17 +1416,14 @@
 	    if (!NILP (bfwd->current_buffer) &&
 		buf == XBUFFER (bfwd->current_buffer))
 	      valcontents = bfwd->current_value;
-	    else if (NILP (symcons))
+	    else
 	      {
-		if (set_it_p)
 		valcontents = assq_no_quit (sym, buf->local_var_alist);
 		if (NILP (valcontents))
 		  valcontents = bfwd->default_value;
 		else
-		  valcontents = XCDR (valcontents);
+		  valcontents = Fcdr (valcontents);
 	      }
-	    else
-	      valcontents = XCDR (symcons);
 	  }
 	break;
       }
@@ -1482,7 +1458,7 @@
 			      /* If it bombs out at startup due to a
 				 Lisp error, this may be nil. */
 			      CONSOLEP (Vselected_console)
-			      ?	XCONSOLE (Vselected_console) : 0, 0, Qnil, 1);
+			      ?	XCONSOLE (Vselected_console) : 0, 0);
 }
 
 static Lisp_Object
@@ -1495,8 +1471,7 @@
   else
     console = Vselected_console;
 
-  return find_symbol_value_1 (sym, current_buffer, XCONSOLE (console), 0,
-			      Qnil, 1);
+  return find_symbol_value_1 (sym, current_buffer, XCONSOLE (console), 0);
 }
 
 /* Return the current value of SYM.  The difference between this function
@@ -1523,45 +1498,7 @@
       dev = 0;
     }
 
-  return find_symbol_value_1 (sym, current_buffer, dev, 1, Qnil, 1);
-}
-
-/* This is an optimized function for quick lookup of buffer local symbols
-   by avoiding O(n) search.  This will work when either:
-     a) We have already found the symbol e.g. by traversing local_var_alist.
-   or
-     b) We know that the symbol will not be found in the current buffer's
-        list of local variables.
-   In the former case, find_it_p is 1 and symbol_cons is the element from
-   local_var_alist.  In the latter case, find_it_p is 0 and symbol_cons
-   is the symbol.
-
-   This function is called from set_buffer_internal which does both of these
-   things. */
-
-Lisp_Object
-find_symbol_value_quickly (Lisp_Object symbol_cons, int find_it_p)
-{
-  /* WARNING: This function can be called when current_buffer is 0
-     and Vselected_console is Qnil, early in initialization. */
-  struct console *dev;
-  Lisp_Object sym = find_it_p ? XCAR (symbol_cons) : symbol_cons;
-  
-  CHECK_SYMBOL (sym);
-  if (CONSOLEP (Vselected_console))
-    dev = XCONSOLE (Vselected_console);
-  else
-    {
-      /* This can also get called while we're preparing to shutdown.
-         #### What should really happen in that case?  Should we
-         actually fix things so we can't get here in that case? */
-      assert (!initialized || preparing_for_armageddon);
-      dev = 0;
-    }
-
-  return find_symbol_value_1 (sym, current_buffer, dev, 1,
-			      find_it_p ? symbol_cons : Qnil,
-			      find_it_p);
+  return find_symbol_value_1 (sym, current_buffer, dev, 1);
 }
 
 DEFUN ("symbol-value", Fsymbol_value, 1, 1, 0, /*
@@ -2191,7 +2128,7 @@
 	case SYMVAL_BOOLEAN_FORWARD:
 	case SYMVAL_OBJECT_FORWARD:
 	case SYMVAL_DEFAULT_BUFFER_FORWARD:
-	  set_up_buffer_local_cache (variable, bfwd, current_buffer, Qnil, 1);
+	  set_up_buffer_local_cache (variable, bfwd, current_buffer);
 	  break;
 
 	case SYMVAL_UNBOUND_MARKER:
@@ -2287,7 +2224,7 @@
 	   value of the C variable.  set_up_buffer_local_cache()
 	   will do this.  It doesn't hurt to do it always,
 	   so just go ahead and do that. */
-	set_up_buffer_local_cache (variable, bfwd, current_buffer, Qnil, 1);
+	set_up_buffer_local_cache (variable, bfwd, current_buffer);
       }
       return (variable);