Subject: Wrong error message triggered in cl--generic-standard-method-combination

From: Alan Mackenzie <[email-masked]>
Date: Fri, 29 Dec 2023 16:50:17 +0000

Hello, Emacs.

In my development version of Emacs (based on the master branch) I get a
backtrace with the error message being:

    Error: wrong-type-argument (symbolp mets-by-qual)

This occurs during the execution of cl-generic-combine-methods, whose
code starts:

(defun cl--generic-standard-method-combination (generic methods)
  (let ((mets-by-qual ()))
    (dolist (method methods)
      (let ((qualifiers (cl-method-qualifiers method)))
        (if (eq (car qualifiers) :extra) (setq qualifiers (cddr qualifiers)))
        (unless (member qualifiers '(() (:after) (:before) (:around)))
          (error "Unsupported qualifiers in function %S: %S"
                 (cl--generic-name generic) qualifiers))
        (push method (alist-get (car qualifiers) mets-by-qual))))

It is the last line that is signalling the error.  The pertinent line
from the backtrace which is the expansion of that last line reads:

    (let* ((k (car qualifiers)) (p (assq k mets-by-qual)) (v (cons method (cdr p)))) (progn (if p (setcdr p v) (progn (signal 'wrong-type-argument (list 'symbolp 'mets-by-qual)))) v))

..  The error is, in actual fact, the failure to find an entry for (car
qualifiers) in the alist mets-by-qual.  The error message given is
rubbish and more than a little misleading.  mets-by-qual is clearly a
symbol.

-- 
Alan Mackenzie (Nuremberg, Germany).