summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/bytecomp.el
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-06-22 09:01:00 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2011-06-22 09:01:00 -0700
commit510005210ac9f4d813c4a2cc99b2c3c11e57c055 (patch)
tree85b8b7bd35e451c71f9f58f2de3ae3ae16c0b25f /lisp/emacs-lisp/bytecomp.el
parentb79e8648b908c6600b99c20d4782e6413d6907ef (diff)
parentddb7ffeeb8ace6501eb453f50f0f9f6852eda21f (diff)
downloademacs-510005210ac9f4d813c4a2cc99b2c3c11e57c055.tar.gz
emacs-510005210ac9f4d813c4a2cc99b2c3c11e57c055.tar.bz2
emacs-510005210ac9f4d813c4a2cc99b2c3c11e57c055.zip
Merge from trunk.
Diffstat (limited to 'lisp/emacs-lisp/bytecomp.el')
-rw-r--r--lisp/emacs-lisp/bytecomp.el19
1 files changed, 19 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 1e7ee315942..127f93c6858 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4244,6 +4244,25 @@ binding slots have been popped."
(defun byte-compile-form-make-variable-buffer-local (form)
(byte-compile-keep-pending form 'byte-compile-normal-call))
+(byte-defop-compiler-1 add-to-list byte-compile-add-to-list)
+(defun byte-compile-add-to-list (form)
+ ;; FIXME: This could be used for `set' as well, except that it's got
+ ;; its own opcode, so the final `byte-compile-normal-call' needs to
+ ;; be replaced with something else.
+ (pcase form
+ (`(,fun ',var . ,_)
+ (byte-compile-check-variable var 'assign)
+ (if (assq var byte-compile--lexical-environment)
+ (byte-compile-log-warning
+ (format "%s cannot use lexical var `%s'" fun var)
+ nil :error)
+ (unless (or (not (byte-compile-warning-enabled-p 'free-vars))
+ (boundp var)
+ (memq var byte-compile-bound-variables)
+ (memq var byte-compile-free-references))
+ (byte-compile-warn "assignment to free variable `%S'" var)
+ (push var byte-compile-free-references)))))
+ (byte-compile-normal-call form))
;;; tags