diff lisp/mule/mule-cmds.el @ 801:2b676dc88c66

[xemacs-hg @ 2002-04-01 03:58:02 by ben] bug fixes (e.g. ballooning on X windows) Makefile.in.in: Try to make the Makefile notice if its source Makefile.in.in is changed, and regenerate and run itself. Use a bigger default SHEAP_ADJUSTMENT on Cygwin; otherwise you can't compile under Mule if a Lisp file has changed. (can't run temacs) TODO.ben-mule-21-5: update. mule/mule-cmds.el: Hash the result of mswindows-get-language-environment-from-locale, since it's very expensive (and causes huge ballooning of memory under X Windows, since it's called from x-get-resource). cl-extra.el, code-files.el, files.el, simple.el, subr.el, x-faces.el: Create new string-equal-ignore-case, based on built-in compare-strings -- compare strings ignoring case without the need to generate garbage by calling downcase. Use it in equalp and elsewhere. alloc.c, bytecode.c, chartab.c, data.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-unixoid.c, extents.c, file-coding.c, fileio.c, fns.c, glyphs.c, gutter.c, lisp-union.h, lisp.h, mule-charset.c, nt.c, process-unix.c, process.c, specifier.c, symbols.c, sysdep.c, sysdep.h, text.c, toolbar.c: Try to implement GC triggering based on percentage of total memory usage. Not currently activated (percentage set to 0) because not quite working. Add `memory-usage' primitive to return XEmacs' idea of its memory usage. Add primitive compare-strings, compatible with FSF 21.1 -- can compare any part of two strings, optionally ignoring case. Improve qxe() functions in text.c for text comparison. Use RETURN_NOT_REACHED to try to avoid warnings about unreachable code. Add volatile_make_int() to fix warning in unix_send_process().
author ben
date Mon, 01 Apr 2002 03:59:04 +0000
parents 2923009caf47
children c10d0c3f965f
line wrap: on
line diff
--- a/lisp/mule/mule-cmds.el	Sun Mar 31 08:30:17 2002 +0000
+++ b/lisp/mule/mule-cmds.el	Mon Apr 01 03:59:04 2002 +0000
@@ -1009,22 +1009,29 @@
 ;; auto-language-alist deleted.  We have a more sophisticated system,
 ;; with the locales stored in the language data.
 
+(defconst langenv-to-locale-hash (make-hash-table :test 'equal))
+
 (defun get-language-environment-from-locale (locale)
   "Convert LOCALE into a language environment.
 LOCALE is a C library locale string, as returned by `current-locale'.
 Uses the `locale' property of the language environment."
-  (block langenv
-    (dolist (langcons language-info-alist)
-      (let* ((lang (car langcons))
-	     (locs (get-language-info lang 'locale))
-	     (case-fold-search t))
-	(dolist (loc (if (listp locs) locs (list locs)))
-	  (if (cond ((functionp loc)
-		     (funcall loc locale))
-		    ((stringp loc)
-		     (string-match (concat "^" loc "\\([^A-Za-z0-9]\\|$\\)")
-				   locale)))
-	      (return-from langenv lang)))))))
+  (or (gethash locale langenv-to-locale-hash)
+      (let ((retval
+	     (block langenv
+	       (dolist (langcons language-info-alist)
+		 (let* ((lang (car langcons))
+			(locs (get-language-info lang 'locale))
+			(case-fold-search t))
+		   (dolist (loc (if (listp locs) locs (list locs)))
+		     (if (cond ((functionp loc)
+				(funcall loc locale))
+			       ((stringp loc)
+				(string-match
+				 (concat "^" loc "\\([^A-Za-z0-9]\\|$\\)")
+				 locale)))
+			 (return-from langenv lang))))))))
+	(puthash locale retval langenv-to-locale-hash)
+	retval)))
 
 (defun mswindows-get-language-environment-from-locale (ms-locale)
   "Convert MS-LOCALE (an MS Windows locale) into a language environment.