[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master bd40ec5d57: * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda):
From: |
Stefan Monnier |
Subject: |
master bd40ec5d57: * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix bug#57903 |
Date: |
Mon, 19 Sep 2022 16:20:04 -0400 (EDT) |
branch: master
commit bd40ec5d57c0787530ebac1e14352a34fe235844
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix bug#57903
Fall back to old slower calling convention in dynbound code (bug#56596).
---
lisp/emacs-lisp/cl-generic.el | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 0560ddda26..3fd85bcb88 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -425,11 +425,13 @@ the specializer used will be the one returned by BODY."
;; only called with explicit arguments.
(uses-cnm (macroexp--fgrep `((,cnm) (,nmp)) nbody))
(λ-lift (mapcar #'car uses-cnm)))
- (if (not uses-cnm)
- (cons nil
- `#'(lambda (,@args)
- ,@(car parsed-body)
- ,nbody))
+ (cond
+ ((not uses-cnm)
+ (cons nil
+ `#'(lambda (,@args)
+ ,@(car parsed-body)
+ ,nbody)))
+ (lexical-binding
(cons 'curried
`#'(lambda (,nm) ;Called when constructing the effective
method.
(let ((,nmp (if (cl--generic-isnot-nnm-p ,nm)
@@ -465,7 +467,20 @@ the specializer used will be the one returned by BODY."
;; A destructuring-bind would do the trick
;; as well when/if it's more efficient.
(apply (lambda (,@λ-lift ,@args) ,nbody)
- ,@λ-lift ,arglist)))))))))
+ ,@λ-lift ,arglist)))))))
+ (t
+ (cons t
+ `#'(lambda (,cnm ,@args)
+ ,@(car parsed-body)
+ ,(macroexp-warn-and-return
+ "cl-defmethod used without lexical-binding"
+ (if (not (assq nmp uses-cnm))
+ nbody
+ `(let ((,nmp (lambda ()
+ (cl--generic-isnot-nnm-p ,cnm))))
+ ,nbody))
+ 'lexical t)))))
+ ))
(f (error "Unexpected macroexpansion result: %S" f))))))
(put 'cl-defmethod 'function-documentation
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master bd40ec5d57: * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix bug#57903,
Stefan Monnier <=