X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5c796e808c3b95dbcd9c2dc149ebe36f6d4e4908..9d74382f6f75aafbd7eab700107bb1e31f640c8a:/src/fns.c diff --git a/src/fns.c b/src/fns.c index 792f94189d..f1602f0a7f 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1,6 +1,7 @@ /* Random utility Lisp functions. - Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -16,8 +17,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #include @@ -47,8 +48,12 @@ Boston, MA 02111-1307, USA. */ #include "frame.h" #include "window.h" #include "blockinput.h" -#if defined (HAVE_MENUS) && defined (HAVE_X_WINDOWS) +#ifdef HAVE_MENUS +#if defined (HAVE_X_WINDOWS) #include "xterm.h" +#elif defined (MAC_OS) +#include "macterm.h" +#endif #endif #ifndef NULL @@ -76,10 +81,10 @@ Lisp_Object Qcodeset, Qdays, Qmonths, Qpaper; extern Lisp_Object Qinput_method_function; -static int internal_equal (); +static int internal_equal P_ ((Lisp_Object , Lisp_Object, int, int)); extern long get_random (); -extern void seed_random (); +extern void seed_random P_ ((long)); #ifndef HAVE_UNISTD_H extern long time (); @@ -1153,13 +1158,13 @@ Beware, this often doesn't really do what you think it does. It is similar to (decode-coding-string STRING 'emacs-mule-unix). If you're not sure, whether to use `string-as-multibyte' or `string-to-multibyte', use `string-to-multibyte'. Beware: - (aref (string-as-multibyte "\201") 0) -> 129 (aka ?\201) - (aref (string-as-multibyte "\300") 0) -> 192 (aka ?\300) - (aref (string-as-multibyte "\300\201") 0) -> 192 (aka ?\300) - (aref (string-as-multibyte "\300\201") 1) -> 129 (aka ?\201) + (aref (string-as-multibyte "\\201") 0) -> 129 (aka ?\\201) + (aref (string-as-multibyte "\\300") 0) -> 192 (aka ?\\300) + (aref (string-as-multibyte "\\300\\201") 0) -> 192 (aka ?\\300) + (aref (string-as-multibyte "\\300\\201") 1) -> 129 (aka ?\\201) but - (aref (string-as-multibyte "\201\300") 0) -> 2240 - (aref (string-as-multibyte "\201\300") 1) -> */) + (aref (string-as-multibyte "\\201\\300") 0) -> 2240 + (aref (string-as-multibyte "\\201\\300") 1) -> */) (string) Lisp_Object string; { @@ -1893,7 +1898,7 @@ DEFUN ("sort", Fsort, Ssort, 2, 2, 0, doc: /* Sort LIST, stably, comparing elements using PREDICATE. Returns the sorted list. LIST is modified by side effects. PREDICATE is called with two elements of LIST, and should return non-nil -if the first element is "less" than the second. */) +if the first element should sort before the second. */) (list, predicate) Lisp_Object list, predicate; { @@ -2249,7 +2254,7 @@ internal_equal (o1, o2, depth, props) if (!internal_equal (OVERLAY_START (o1), OVERLAY_START (o2), depth + 1, props) || !internal_equal (OVERLAY_END (o1), OVERLAY_END (o2), - depth + 1)) + depth + 1, props)) return 0; o1 = XOVERLAY (o1)->plist; o2 = XOVERLAY (o2)->plist; @@ -2546,14 +2551,14 @@ RANGE should be nil (for the default value), a vector which identifies a character set or a row of a character set, a character set name, or a character code. If the characters in the specified range have different values, -an error is signalled. +an error is signaled. Note that this function doesn't check the parent of CHAR-TABLE. */) (char_table, range) Lisp_Object char_table, range; { int charset_id, c1 = 0, c2 = 0; - int size, i; + int size; Lisp_Object ch, val, current_default; CHECK_CHAR_TABLE (char_table); @@ -3513,7 +3518,8 @@ particular subfeatures supported in this version of FEATURE. */) CHECK_SYMBOL (feature); CHECK_LIST (subfeatures); if (!NILP (Vautoload_queue)) - Vautoload_queue = Fcons (Fcons (Vfeatures, Qnil), Vautoload_queue); + Vautoload_queue = Fcons (Fcons (make_number (0), Vfeatures), + Vautoload_queue); tem = Fmemq (feature, Vfeatures); if (NILP (tem)) Vfeatures = Fcons (feature, Vfeatures); @@ -3558,14 +3564,20 @@ The normal messages at start and end of loading FILENAME are suppressed. */) { register Lisp_Object tem; struct gcpro gcpro1, gcpro2; + int from_file = load_in_progress; CHECK_SYMBOL (feature); /* Record the presence of `require' in this file even if the feature specified is already loaded. But not more than once in any file, - and not when we aren't loading a file. */ - if (load_in_progress) + and not when we aren't loading or reading from a file. */ + if (!from_file) + for (tem = Vcurrent_load_list; CONSP (tem); tem = XCDR (tem)) + if (NILP (XCDR (tem)) && STRINGP (XCAR (tem))) + from_file = 1; + + if (from_file) { tem = Fcons (Qrequire, feature); if (NILP (Fmember (tem, Vcurrent_load_list))) @@ -5106,6 +5118,12 @@ sxhash_list (list, depth) hash = SXHASH_COMBINE (hash, hash2); } + if (!NILP (list)) + { + unsigned hash2 = sxhash (list, depth + 1); + hash = SXHASH_COMBINE (hash, hash2); + } + return hash; } @@ -5832,7 +5850,7 @@ syms_of_fns () DEFVAR_LISP ("features", &Vfeatures, doc: /* A list of symbols which are the features of the executing emacs. Used by `featurep' and `require', and altered by `provide'. */); - Vfeatures = Qnil; + Vfeatures = Fcons (intern ("emacs"), Qnil); Qsubfeatures = intern ("subfeatures"); staticpro (&Qsubfeatures);