1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

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.
This commit is contained in:
Alan Mackenzie 2015-11-23 14:10:36 +00:00
parent 2b8154f2bc
commit 74e5d4e21e

View file

@ -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))