Make cconv-analyse understand the need for closures.
commit43e67019dfc4fb7d3474e0fbedcfec60f2300521
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 11 Feb 2011 19:48:54 +0000 (11 14:48 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 11 Feb 2011 19:48:54 +0000 (11 14:48 -0500)
treecf67296a599964c895e443024fe4544bcd54f428
parentd779e73c22ae9fedcf6edc6ec286f19cf2e3d89a
Make cconv-analyse understand the need for closures.
* lisp/emacs-lisp/byte-lexbind.el (byte-compile-lforminfo-analyze):
Understand the :fun-body case for catch, save-window-excursion, and
condition-case.
(byte-compile-maybe-push-heap-environment): No need when nclosures is
zero and byte-compile-current-num-closures is -1.

* lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Fix `fun' that was not
renamed to `bytecomp-fun'.

* lisp/emacs-lisp/cconv.el (cconv-not-lexical-var-p): New function.
(cconv-freevars): Use it.
(cconv-closure-convert-rec): Avoid `position'.
(cconv-analyse-function): New function.
(cconv-analyse-form): Use it.  `inclosure' can't be nil any more.
Check lexical vars at let-binding time rather than when referenced.
For defuns to be in an empty environment and lambdas to take lexical args.
Pay attention to the need to build closures in catch, unwind-protect,
save-window-excursion, condition-case, and track-mouse.
Fix defconst/defvar handling.
lisp/ChangeLog
lisp/emacs-lisp/byte-lexbind.el
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/cconv.el
lisp/emacs-lisp/macroexp.el