[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#6376: 23.2; byte compile add-to-list report free variable
From: |
Stefan Monnier |
Subject: |
bug#6376: 23.2; byte compile add-to-list report free variable |
Date: |
Tue, 08 Jun 2010 21:29:20 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
> I made a mistake with a variable name to add-to-list and wondered if the
> byte compiler might report
> (add-to-list 'nosuchvariable ...)
> as a free variable, similar to the report for
I use the code below for add-hook:
(byte-defop-compiler-1 remove-hook byte-compile-add-hook)
(defun byte-compile-add-hook (form)
(let ((sym (car-safe (cdr-safe form))))
(when (and (eq 'quote (car-safe sym))
(setq sym (car-safe (cdr sym)))
(symbolp sym))
;; Gross hack: We want to do the sanity checks just as we would for
;; a setq so we first do a setq and then pop the byte-code that was
;; just pushed by byte-compile-variable-ref.
(let ((byte-compile-output byte-compile-output)
(byte-compile-maxdepth byte-compile-maxdepth)
(byte-compile-depth byte-compile-depth))
(byte-compile-variable-ref 'byte-varset sym)))
(byte-compile-normal-call form)))
so I'm in favor of such a change, but it would need to be cleaned up such
that your byte-compile-check-assign is also used for
byte-compile-variable-ref (i.e. the code should be hoisted out of
byte-compile-variable-ref). Also, note that add-to-list is not only
a "varset" but also a "varref" (it reads the var before assigning to it).
Stefan