emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master e28c990: (cl-defstruct): Improve error message for


From: Stefan Monnier
Subject: [Emacs-diffs] master e28c990: (cl-defstruct): Improve error message for slots w/o value (bug#25312)
Date: Tue, 3 Jan 2017 21:07:50 +0000 (UTC)

branch: master
commit e28c99082ac03b06600b8b943704e0786c8887f9
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    (cl-defstruct): Improve error message for slots w/o value (bug#25312)
    
    * lisp/emacs-lisp/cl-macs.el (cl-defstruct): Don't signal an error but
    emit a warning for those coders who forgot to put a default value in
    their slot.
---
 lisp/emacs-lisp/cl-macs.el |   18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 945da1f..40342f3 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -2745,7 +2745,23 @@ non-nil value, that slot cannot be set via `setf'.
                             `(nth ,pos cl-x))))
                     forms)
               (when (cl-oddp (length desc))
-                (error "Invalid options for slot %s in %s" slot name))
+                (push
+                 (macroexp--warn-and-return
+                  (format "Missing value for option `%S' of slot `%s' in 
struct %s!"
+                          (car (last desc)) slot name)
+                  'nil)
+                 forms)
+                (when (and (keywordp (car defaults))
+                           (not (keywordp (car desc))))
+                  (let ((kw (car defaults)))
+                    (push
+                     (macroexp--warn-and-return
+                      (format "  I'll take `%s' to be an option rather than a 
default value."
+                              kw)
+                      'nil)
+                     forms)
+                    (push kw desc)
+                    (setcar defaults nil))))
               (if (plist-get desc ':read-only)
                   (push `(gv-define-expander ,accessor
                            (lambda (_cl-do _cl-x)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]