* gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 25 Jan 2002 06:31:11 +0000 (06:31 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 25 Jan 2002 06:31:11 +0000 (06:31 +0000)
error.

* gnus.el (gnus-server-to-method): Made into subst.
(gnus-server-method-cache): New variable.
(gnus-server-to-method): Use it.
(gnus-group-method-cache): New variable.
(gnus-find-method-for-group-1): Renamed.
(gnus-find-method-for-group): New function.
(gnus-group-method-cache): Removed.

lisp/ChangeLog
lisp/dgnushack.el
lisp/gnus-range.el
lisp/gnus-start.el
lisp/gnus.el

index 754a03e..79c5497 100644 (file)
@@ -1,5 +1,16 @@
 2002-01-25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
+       * gnus-range.el (gnus-inverse-list-range-intersection): Off-by-one
+       error. 
+
+       * gnus.el (gnus-server-to-method): Made into subst.
+       (gnus-server-method-cache): New variable.
+       (gnus-server-to-method): Use it.
+       (gnus-group-method-cache): New variable.
+       (gnus-find-method-for-group-1): Renamed.
+       (gnus-find-method-for-group): New function.
+       (gnus-group-method-cache): Removed.
+
        * gnus-sum.el (gnus-compute-unseen-list): Use new optimized
        function. 
 
index 2eb50c4..b06582e 100644 (file)
        (t (concat filename ".elc"))))
 
 (require 'bytecomp)
+(require 'byte-opt)
+;; To avoid having defsubsts and inlines happen.
+;(defun byte-optimize-inline-handler (form)
+;  "byte-optimize-handler for the `inline' special-form."
+;  (cons 'progn (cdr form)))
+;(defalias 'byte-compile-file-form-defsubst 'byte-compile-file-form-defun)
 
 (push srcdir load-path)
 (load (expand-file-name "lpath.el" srcdir) nil t)
index a51b7ee..8e3c097 100644 (file)
@@ -355,7 +355,7 @@ LIST is a sorted list."
       (when (or (not ranges)
                (if (numberp (car ranges))
                    (not (= (car ranges) number))
-                 (not (< number (cdar ranges)))))
+                 (not (<= number (cdar ranges)))))
        (push number result)))
     (nreverse result)))
 
index 295d4c9..d90e1e1 100644 (file)
@@ -1550,6 +1550,7 @@ newsgroup."
 ;; Go though `gnus-newsrc-alist' and compare with `gnus-active-hashtb'
 ;; and compute how many unread articles there are in each group.
 (defun gnus-get-unread-articles (&optional level)
+  (setq gnus-server-method-cache nil)
   (let* ((newsrc (cdr gnus-newsrc-alist))
         (level (or level gnus-activate-level (1+ gnus-level-subscribed)))
         (foreign-level
index 627c327..837fd09 100644 (file)
@@ -1786,6 +1786,7 @@ covered by that variable."
 (defvar gnus-original-article-buffer " *Original Article*")
 (defvar gnus-newsgroup-name nil)
 (defvar gnus-ephemeral-servers nil)
+(defvar gnus-server-method-cache nil)
 
 (defvar gnus-agent nil
   "Whether we want to use the Gnus agent or not.")
@@ -2680,32 +2681,35 @@ that that variable is buffer-local to the summary buffers."
        (t
         (gnus-server-add-address method))))
 
-(defun gnus-server-to-method (server)
+(defsubst gnus-server-to-method (server)
   "Map virtual server names to select methods."
-  (or
-   ;; Is this a method, perhaps?
-   (and server (listp server) server)
-   ;; Perhaps this is the native server?
-   (and (equal server "native") gnus-select-method)
-   ;; It should be in the server alist.
-   (cdr (assoc server gnus-server-alist))
-   ;; It could be in the predefined server alist.
-   (cdr (assoc server gnus-predefined-server-alist))
-   ;; If not, we look through all the opened server
-   ;; to see whether we can find it there.
-   (let ((opened gnus-opened-servers))
-     (while (and opened
-                (not (equal server (format "%s:%s" (caaar opened)
-                                           (cadaar opened)))))
-       (pop opened))
-     (caar opened))
-   ;; It could be a named method, search all servers
-   (let ((servers gnus-secondary-select-methods))
-     (while (and servers
-                (not (equal server (format "%s:%s" (caar servers)
-                                           (cadar servers)))))
-       (pop servers))
-     (car servers))))
+  (or (and server (listp server) server)
+      (cdr (assoc server gnus-server-method-cache))
+      (let ((result
+            (or
+             ;; Perhaps this is the native server?
+             (and (equal server "native") gnus-select-method)
+             ;; It should be in the server alist.
+             (cdr (assoc server gnus-server-alist))
+             ;; It could be in the predefined server alist.
+             (cdr (assoc server gnus-predefined-server-alist))
+             ;; If not, we look through all the opened server
+             ;; to see whether we can find it there.
+             (let ((opened gnus-opened-servers))
+               (while (and opened
+                           (not (equal server (format "%s:%s" (caaar opened)
+                                                      (cadaar opened)))))
+                 (pop opened))
+               (caar opened))
+             ;; It could be a named method, search all servers
+             (let ((servers gnus-secondary-select-methods))
+               (while (and servers
+                           (not (equal server (format "%s:%s" (caar servers)
+                                                      (cadar servers)))))
+                 (pop servers))
+               (car servers)))))
+       (push (cons server result) gnus-server-method-cache)
+       result)))
 
 (defmacro gnus-method-equal (ss1 ss2)
   "Say whether two servers are equal."