Mercurial > hg > xemacs-beta
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);