Inspired by a suggestion from RMS in: http://bugs.gnu.org/23640#58
* .dir-locals.el (c-mode): Adjust to macro changes.
* src/conf_post.h (NONVOLATILE, UNINIT): New macros (Bug#23640).
(IF_LINT): Remove. All uses replaced by the new macros.
It now runs internal variable setting functions after the mode hooks, no
longer runs the mode hooks twice, and declares the configuration variables for
noise macros and macros with semicolons as safe variables (when given suitable
arguments).
Fixes bug #16759 and bug #23476.
* .dir-locals: Put the c-noise-macros-with-paren-names setting back into the C
Mode value.
* lisp/progmodes/cc-mode.el: (c-basic-common-init): Remove the call to
c-make-macro-with-semi-re.
(c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode, awk-mode): Move
c-make-noise-macro-regexps and c-make-macro-with-semi-re (where appropriate)
and c-update-modeline into the :after-hook form. Remove the explicit settings
of the syntax table, the abbreviation table and the local key map, since they
duplicate forms generated by define-derived-mode. Remove the explicit
invocation of each mode's mode hook, since they duplicate ones generated by
define-derived-mode.
* lisp/progmodes/cc-vars.el: (c-string-list-p, c-string-or-string-list-p): New
functions.
(c-noise-macro-names, c-noise-macro-with-parens-names): give the
save-local-variable property c-string-list-p.
(c-macro-names-with-semicolon): give the save-local-variable property
c-string-or-string-list-p.
* doc/misc/cc-mode.texi: (Macros with ;, Noise Macros): Note that it's not
necessary to call the regexp generating functions after setting the pertinent
configuration values in a mode hook.
Change 8e4595a438 from 2016-04-30 17:28:24
+0000 was an enhancement to .dir-locals to allow correct fontification
of certain macro constructs.
* .dir-locals.el: Remove the two forms for C Mode dealing with noise macros.
* .dir-locals.el: (log-edit-move): Add the "Author: " header.
* lisp/vc/log-edit.el (log-edit-mode-map): Add binding for
`log-edit-beginning-of-line'.
(log-edit-setup-add-author): New user option.
(log-edit-beginning-of-line): New command.
(log-edit): Move major mode call above the contents setup so that
the local variable values are already applied.
(log-edit): Only insert "Author: " when
`log-edit-setup-add-author' is non-nil.
(log-edit): When SETUP is non-nil, position point after ": "
instead of point-min.
(log-edit-font-lock-gnu-style)
(log-edit-font-lock-gnu-keywords): New vars.
(log-edit-font-lock-keywords): New fun.
(log-edit-mode): Don't fold case in font-lock.
(log-edit-font-lock-keywords): Do not assume case-folding.
* .dir-locals.el (log-edit-mode): Enable gnu-style checks.
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode): Handle new form of
`byte-constant'.
(byte-compile-close-variables, displaying-byte-compile-warnings):
Add edebug spec.
(byte-compile-toplevel-file-form): New fun, split out of
byte-compile-file-form.
(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-push-unknown-constant)
(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.
(FUNVEC_COMPILED_TAG_P, FUNVEC_COMPILED_P): 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.