summaryrefslogtreecommitdiff
path: root/lisp/gnus/gnus.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/gnus/gnus.el')
-rw-r--r--lisp/gnus/gnus.el105
1 files changed, 44 insertions, 61 deletions
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 0673ac15f60..23643cc6c79 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -2817,67 +2817,50 @@ See Info node `(gnus)Formatting Variables'."
;; Info access macros.
-(defmacro gnus-info-group (info)
- `(nth 0 ,info))
-(defmacro gnus-info-rank (info)
- `(nth 1 ,info))
-(defmacro gnus-info-read (info)
- `(nth 2 ,info))
-(defmacro gnus-info-marks (info)
- `(nth 3 ,info))
-(defmacro gnus-info-method (info)
- `(nth 4 ,info))
-(defmacro gnus-info-params (info)
- `(nth 5 ,info))
-
-(defmacro gnus-info-level (info)
- `(let ((rank (gnus-info-rank ,info)))
- (if (consp rank)
- (car rank)
- rank)))
-(defmacro gnus-info-score (info)
- `(let ((rank (gnus-info-rank ,info)))
- (or (and (consp rank) (cdr rank)) 0)))
-
-(defmacro gnus-info-set-group (info group)
- `(setcar ,info ,group))
-(defmacro gnus-info-set-rank (info rank)
- `(setcar (nthcdr 1 ,info) ,rank))
-(defmacro gnus-info-set-read (info read)
- `(setcar (nthcdr 2 ,info) ,read))
-(defmacro gnus-info-set-marks (info marks &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,marks 3)
- `(setcar (nthcdr 3 ,info) ,marks)))
-(defmacro gnus-info-set-method (info method &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,method 4)
- `(setcar (nthcdr 4 ,info) ,method)))
-(defmacro gnus-info-set-params (info params &optional extend)
- (if extend
- `(gnus-info-set-entry ,info ,params 5)
- `(setcar (nthcdr 5 ,info) ,params)))
-
-(defun gnus-info-set-entry (info entry number)
+(cl-defstruct (gnus-info
+ (:constructor nil)
+ (:type list))
+ group rank read marks method params)
+
+(defsubst gnus-info-level (info)
+ (declare (gv-setter gnus-info--set-level))
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (car rank)
+ rank)))
+(defsubst gnus-info-score (info)
+ (declare (gv-setter gnus-info--set-score))
+ (let ((rank (gnus-info-rank info)))
+ (or (and (consp rank) (cdr rank)) 0)))
+
+(defsubst gnus-info-set-marks (info marks &optional extend)
+ (if extend (gnus-info--grow-entry info 3))
+ (setf (gnus-info-marks info) marks))
+(defsubst gnus-info-set-method (info method &optional extend)
+ (if extend (gnus-info--grow-entry info 4))
+ (setf (gnus-info-method info) method))
+(defsubst gnus-info-set-params (info params &optional extend)
+ (if extend (gnus-info--grow-entry info 5))
+ (setf (gnus-info-params info) params))
+
+(defun gnus-info--grow-entry (info number)
;; Extend the info until we have enough elements.
(while (<= (length info) number)
- (nconc info (list nil)))
- ;; Set the entry.
- (setcar (nthcdr number info) entry))
-
-(defmacro gnus-info-set-level (info level)
- `(let ((rank (cdr ,info)))
- (if (consp (car rank))
- (setcar (car rank) ,level)
- (setcar rank ,level))))
-(defmacro gnus-info-set-score (info score)
- `(let ((rank (cdr ,info)))
- (if (consp (car rank))
- (setcdr (car rank) ,score)
- (setcar rank (cons (car rank) ,score)))))
-
-(defmacro gnus-get-info (group)
- `(nth 1 (gethash ,group gnus-newsrc-hashtb)))
+ (nconc info (list nil))))
+
+(defsubst gnus-info--set-level (info level)
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (setcar rank level)
+ (setf (gnus-info-rank info) level))))
+(defsubst gnus-info--set-score (info score)
+ (let ((rank (gnus-info-rank info)))
+ (if (consp rank)
+ (setcdr rank score)
+ (setf (gnus-info-rank info) (cons rank score)))))
+
+(defsubst gnus-get-info (group)
+ (nth 1 (gethash group gnus-newsrc-hashtb)))
(defun gnus-set-info (group info)
(setcdr (gethash group gnus-newsrc-hashtb)
@@ -3704,14 +3687,14 @@ GROUP can also be an INFO structure."
(setq params (delq name params))
(while (assq name params)
(gnus-alist-pull name params))
- (gnus-info-set-params info params))))))
+ (setf (gnus-info-params info) params))))))
(defun gnus-group-add-score (group &optional score)
"Add SCORE to the GROUP score.
If SCORE is nil, add 1 to the score of GROUP."
(let ((info (gnus-get-info group)))
(when info
- (gnus-info-set-score info (+ (gnus-info-score info) (or score 1))))))
+ (setf (gnus-info-score info) (+ (gnus-info-score info) (or score 1))))))
(defun gnus-short-group-name (group &optional levels)
"Collapse GROUP name LEVELS.