From d6285c44150fc9f6d0d3d6dadcd272bae3c498e5 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Fri, 2 Dec 2016 00:03:57 -0500 Subject: [PATCH v1] Define struct predicate before acccesors The accessor functions use the predicate function, which causes problems when reloading after unload-feature: the compiler-macro property is still present on the predicate symbol, and the compiler fails to find the definition when trying to inline it into the accessor function. * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Move predicate definition before field accessor definitions. --- lisp/emacs-lisp/cl-macs.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index c51ed9d..b3a60b1 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2687,6 +2687,14 @@ cl-defstruct (= safety 1)) (cons 'and (cl-cdddr pred-form)) `(,predicate cl-x)))) + (when pred-form + (push `(cl-defsubst ,predicate (cl-x) + (declare (side-effect-free error-free)) + ,(if (eq (car pred-form) 'and) + (append pred-form '(t)) + `(and ,pred-form t))) + forms) + (push `(put ',name 'cl-deftype-satisfies ',predicate) forms)) (let ((pos 0) (descp descs)) (while descp (let* ((desc (pop descp)) @@ -2741,14 +2749,6 @@ cl-defstruct (setq pos (1+ pos)))) (setq slots (nreverse slots) defaults (nreverse defaults)) - (when pred-form - (push `(cl-defsubst ,predicate (cl-x) - (declare (side-effect-free error-free)) - ,(if (eq (car pred-form) 'and) - (append pred-form '(t)) - `(and ,pred-form t))) - forms) - (push `(put ',name 'cl-deftype-satisfies ',predicate) forms)) (and copier (push `(defalias ',copier #'copy-sequence) forms)) (if constructor -- 2.9.3