diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-22 09:01:00 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-22 09:01:00 -0700 |
commit | 510005210ac9f4d813c4a2cc99b2c3c11e57c055 (patch) | |
tree | 85b8b7bd35e451c71f9f58f2de3ae3ae16c0b25f /lisp/emacs-lisp/bytecomp.el | |
parent | b79e8648b908c6600b99c20d4782e6413d6907ef (diff) | |
parent | ddb7ffeeb8ace6501eb453f50f0f9f6852eda21f (diff) | |
download | emacs-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.el | 19 |
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 |