From 1fe087a1ab4182b2e6c1d05444461acc4e78e2d8 Mon Sep 17 00:00:00 2001 From: Katsumi Yamaoka Date: Tue, 27 Jan 2015 03:15:49 +0000 Subject: [PATCH] lisp/emacs-lisp/cl.el (cl--function-convert): Work for cl-flet and cl-labels --- lisp/ChangeLog | 6 +++++- lisp/emacs-lisp/cl.el | 11 ++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ff352a25eea..96b7f63a26a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ -2015-01-26 Stefan Monnier +2015-01-27 Katsumi Yamaoka + + * emacs-lisp/cl.el (cl--function-convert): Run cl--labels-convert + for the case cl-flet or cl-labels form is wrapped with lexical-let. +2015-01-26 Stefan Monnier * emacs-lisp/cl-generic.el (cl--generic-method): New struct. (cl--generic): The method-table is now a (list-of cl--generic-method). diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index da3eab73fc4..1cd7bd76b0e 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -342,6 +342,8 @@ The two cases that are handled are: - renaming of F when it's a function defined via `cl-labels' or `labels'." (require 'cl-macs) (declare-function cl--expr-contains-any "cl-macs" (x y)) + (declare-function cl--labels-convert "cl-macs" (f)) + (defvar cl--labels-convert-cache) (cond ;; ¡¡Big Ugly Hack!! We can't use a compiler-macro because those are checked ;; *after* handling `function', but we want to stop macroexpansion from @@ -374,13 +376,8 @@ The two cases that are handled are: (setq cl--function-convert-cache (cons newf res)) res)))) (t - (let ((found (assq f macroexpand-all-environment))) - (if (and found (ignore-errors - (eq (cadr (cl-caddr found)) 'cl-labels-args))) - (cadr (cl-caddr (cl-cadddr found))) - (let ((res `(function ,f))) - (setq cl--function-convert-cache (cons f res)) - res)))))) + (setq cl--labels-convert-cache cl--function-convert-cache) + (cl--labels-convert f)))) (defmacro lexical-let (bindings &rest body) "Like `let', but lexically scoped. -- 2.39.2