summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/cconv.el
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2015-11-23 14:10:36 +0000
committerAlan Mackenzie <acm@muc.de>2015-11-23 14:10:36 +0000
commit74e5d4e21e7206693ce6ce999e884d75230ad33b (patch)
treee194873c06f757626e1eca5db3ce6d40a2bb85b3 /lisp/emacs-lisp/cconv.el
parent2b8154f2bc1ad678fdb8e4677cf25359251d5c01 (diff)
downloademacs-74e5d4e21e7206693ce6ce999e884d75230ad33b.tar.gz
Don't let cconv_convert insert a nil argument into a `setq' form.
Fixes bug#21983. * lisp/emacs-lisp/cconv.el (cconv-convert): Don't silently insert a nil last argument into a `setq' when there're an odd number of args. This enables the byte compiler to issue a message in this case.
Diffstat (limited to 'lisp/emacs-lisp/cconv.el')
-rw-r--r--lisp/emacs-lisp/cconv.el10
1 files changed, 6 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index efa9a3da011..4a3c273bc84 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -477,17 +477,19 @@ places where they originally did not directly appear."
(while forms
(let* ((sym (pop forms))
(sym-new (or (cdr (assq sym env)) sym))
- (value (cconv-convert (pop forms) env extend)))
+ (value-in-list
+ (and forms
+ (list (cconv-convert (pop forms) env extend)))))
(push (pcase sym-new
- ((pred symbolp) `(setq ,sym-new ,value))
- (`(car-safe ,iexp) `(setcar ,iexp ,value))
+ ((pred symbolp) `(setq ,sym-new ,@value-in-list))
+ (`(car-safe ,iexp) `(setcar ,iexp ,@value-in-list))
;; This "should never happen", but for variables which are
;; mutated+captured+unused, we may end up trying to `setq'
;; on a closed-over variable, so just drop the setq.
(_ ;; (byte-compile-report-error
;; (format "Internal error in cconv of (setq %s ..)"
;; sym-new))
- value))
+ (car value-in-list)))
prognlist)))
(if (cdr prognlist)
`(progn . ,(nreverse prognlist))