• Stefan Monnier's avatar
    Get rid of funvec. · 876c194c
    Stefan Monnier authored
    * lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode): Handle new form of
    (byte-compile-close-variables, displaying-byte-compile-warnings):
    Add edebug spec.
    (byte-compile-toplevel-file-form): New fun, split out of
    (byte-compile-from-buffer): Use it to avoid applying cconv
    multiple times.
    (byte-compile): Only strip `function' if it's present.
    (byte-compile-lambda): Add `reserved-csts' argument.
    Use new lexenv arg of byte-compile-top-level.
    (byte-compile-reserved-constants): New var.
    (byte-compile-constants-vector): Obey it.
    (byte-compile-constants-vector): Handle new `byte-constant' form.
    (byte-compile-top-level): Add args `lexenv' and `reserved-csts'.
    (byte-compile-form): Don't check callargs here.
    (byte-compile-normal-call): Do it here instead.
    (byte-compile-resolve-unknown-constant): Remove, unused.
    (byte-compile-make-closure): Use `make-byte-code' rather than `curry',
    putting the environment into the "constant" pool.
    (byte-compile-get-closed-var): Use special byte-constant.
    * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Handle new
    intermediate special form `internal-make-vector'.
    (byte-optimize-lapcode): Handle new form of `byte-constant'.
    * lisp/help-fns.el (describe-function-1): Don't handle funvecs.
    * lisp/emacs-lisp/macroexp.el (macroexpand-all-1): Only convert quote to
    function if the content is a lambda expression, not if it's a closure.
    * emacs-lisp/eieio-come.el: Remove.
    * lisp/emacs-lisp/eieio.el: Don't require eieio-comp.
    (defmethod): Do a bit more work to find the body and wrap it into
    a function before passing it to eieio-defmethod.
    (eieio-defmethod): New arg `code' for it.
    * lisp/emacs-lisp/debug.el (debugger-setup-buffer): Don't hide things in
    debugger backtrace.
    * lisp/emacs-lisp/cl-extra.el (cl-macroexpand-all): Use backquotes, and be
    more careful when quoting a function value.
    * lisp/emacs-lisp/cconv.el (cconv-freevars): Accept defvar/defconst.
    (cconv-closure-convert-rec): Catch stray `internal-make-closure'.
    * lisp/Makefile.in (COMPILE_FIRST): Compile pcase and cconv early.
    * src/eval.c (Qcurry): Remove.
    (funcall_funvec): Remove.
    (funcall_lambda): Move new byte-code handling to reduce impact.
    Treat all args as lexical in the case of lexbind.
    (Fcurry): Remove.
    * src/data.c (Qfunction_vector): Remove.
    (Ffunvecp): Remove.
    * src/lread.c (read1): Revert to calling make_byte_code here.
    (read_vector): Don't call make_byte_code any more.
    * src/lisp.h (enum pvec_type): Rename back to PVEC_COMPILED.
    (XSETCOMPILED): Rename back from XSETFUNVEC.
    (FUNVEC_SIZE): Remove.
    (COMPILEDP): Rename back from FUNVECP.
    * src/fns.c (Felt): Remove unexplained FUNVEC check.
    * src/doc.c (Fdocumentation): Don't handle funvec.
    * src/alloc.c (make_funvec, Ffunvec): Remove.
    * doc/lispref/vol2.texi (Top):
    * doc/lispref/vol1.texi (Top):
    * doc/lispref/objects.texi (Programming Types, Funvec Type, Type Predicates):
    * doc/lispref/functions.texi (Functions, What Is a Function, FunctionCurrying):
    * doc/lispref/elisp.texi (Top): Remove mentions of funvec and curry.
alloc.c 162 KB