Commit b74c8847 authored by Artur Malabarba's avatar Artur Malabarba
Browse files

* lisp/emacs-lisp/cl-macs.el (cl-defstruct): Fix a bug

The defsubst was being created as:
    (cl-defsubst name (args) ("DOC") ...)

* test/automated/cl-lib-tests.el (cl-lib-struct-constructors): Add test
parent e21e3b6b
......@@ -2730,7 +2730,7 @@ non-nil value, that slot cannot be set via `setf'.
slots defaults)))
(push `(cl-defsubst ,cname
(&cl-defs (nil ,@descs) ,@args)
,(if (stringp doc) (list doc)
,(if (stringp doc) doc
(format "Constructor for objects of type `%s'." name))
,@(if (cl--safe-expr-p `(progn ,@(mapcar #'cl-second descs)))
'((declare (side-effect-free t))))
......
......@@ -206,7 +206,8 @@
(cl-defstruct (mystruct
(:constructor cl-lib--con-1 (&aux (abc 1)))
(:constructor cl-lib--con-2 (&optional def)))
(:constructor cl-lib--con-2 (&optional def) "Constructor docstring."))
"General docstring."
(abc 5 :readonly t) (def nil))
(ert-deftest cl-lib-struct-accessors ()
(let ((x (make-mystruct :abc 1 :def 2)))
......@@ -220,6 +221,11 @@
(`((cl-tag-slot) (abc 5 :readonly t)
(def . ,(or `nil `(nil))))
t)))))
(ert-deftest cl-lib-struct-constructors ()
(should (equal (documentation 'cl-lib--con-2 t)
"Constructor docstring."))
(should (mystruct-p (cl-lib--con-1)))
(should (mystruct-p (cl-lib--con-2))))
(ert-deftest cl-lib-arglist-performance ()
;; An `&aux' should not cause lambda's arglist to be turned into an &rest
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment