1. 11 Feb, 2011 2 commits
    • Stefan Monnier's avatar
      Let cconv use :fun-body in special forms that need it. · 295fb2ac
      Stefan Monnier authored
      * lisp/emacs-lisp/cconv.el (cconv-closure-convert): Drop `toplevel' arg.
      (cconv-closure-convert-toplevel): Remove.
      (cconv-lookup-let): New fun.
      (cconv-closure-convert-rec): Don't bother with defs-are-legal.
      Use :fun-body to handle special forms that require closing their forms.
      * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form, byte-compile):
      Use cconv-closure-convert instead of cconv-closure-convert-toplevel.
      (byte-compile-lambda, byte-compile-make-closure):
      * lisp/emacs-lisp/byte-lexbind.el (byte-compile-maybe-push-heap-environment):
      Make sure cconv did its job.
      * lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode): Check stack-depth
      before using it.
      * lisp/dired.el (dired-desktop-buffer-misc-data): Don't use a dynamic var as
      function argument.
      295fb2ac
    • Stefan Monnier's avatar
      Make cconv-analyse understand the need for closures. · 43e67019
      Stefan Monnier authored
      * 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.
      43e67019
  2. 18 Jun, 2010 1 commit
  3. 13 Jun, 2010 1 commit