Function: cl--generic-build-combined-method
cl--generic-build-combined-method is a byte-compiled function defined
in cl-generic.el.gz.
Signature
(cl--generic-build-combined-method GENERIC METHODS)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-generic.el.gz
(defun cl--generic-build-combined-method (generic methods)
;; Since `cl-generic-combine-methods' is itself a generic function,
;; there is a chicken and egg problem when computing a combined
;; method for `cl-generic-combine-methods'.
;; We break such infinite recursion by detecting it and falling
;; back to `cl--generic-standard-method-combination' when it happens.
;; FIXME: Since the fields of `generic' are modified, the
;; `cl--generic-combined-method-memoization' hash-table won't work
;; right, because the hashes will change! It's not terribly serious,
;; but reduces the effectiveness of the table.
(let ((key (cons generic methods)))
(pcase (gethash key cl--generic-combined-method-memoization)
(:cl--generic--under-construction
;; Fallback to the standard method combination.
(setf (gethash key cl--generic-combined-method-memoization)
(cl--generic-standard-method-combination generic methods)))
('nil
(setf (gethash key cl--generic-combined-method-memoization)
:cl--generic--under-construction)
(let ((f nil))
(unwind-protect
(setq f (cl-generic-combine-methods generic methods))
(setf (gethash key cl--generic-combined-method-memoization) f))))
(f f))))