1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-13 01:20:28 -08:00
Commit graph

7687 commits

Author SHA1 Message Date
Stefan Monnier
c7b35ea306 * lisp/emacs-lisp/edebug.el (edebug--handle-&-spec-op) <&lookup>: New method
* doc/lispref/edebug.texi (Specification List): Document it.

* lisp/emacs-lisp/pcase.el (pcase-PAT): Use it.
(pcase-MACRO): Remove Edebug element.
(pcase--get-edebug-spec): New function.
(pcase--edebug-match-macro): Remove function.
2021-02-12 12:17:40 -05:00
Stefan Monnier
6ae731e04f * lisp/emacs-lisp/cl-macs.el (cl-flet): Fix edebug spec 2021-02-12 11:37:49 -05:00
Stefan Monnier
1d2487b1fc * lisp/emacs-lisp/edebug.el: Misc cleanups.
Move all definitions under the `edebug-` prefix.

(edebug-get-spec): Rename from `get-edebug-spec`.
(edebug-move-cursor): Use `cl-callf`.
(edebug-spec-p): Remove unused function.
(def-edebug-spec, edebug-spec-list, edebug-spec): Remove unused specs
(nothing in there gets instrumented anyway).
(edebug-tracing): Use `declare`.
(edebug-cancel-on-entry): Rename from `cancel-edebug-on-entry`.
(edebug-global-prefix): Rename from `global-edebug-prefix`.
(edebug-global-map): Rename from `global-edebug-map`.

* lisp/emacs-lisp/pcase.el (pcase-PAT): Remove `let`.
(let): Use `declare` instead.
(pcase--edebug-match-macro): Use new name `edebug-get-spec`.
2021-02-12 11:13:39 -05:00
Stefan Monnier
3a4b65177f * lisp/emacs-lisp/gv.el (gv-place): Simplify 2021-02-11 19:06:30 -05:00
Andrea Corallo
d3a399dd29 * lisp/emacs-lisp/comp.el (comp-trampoline-compile): Default to speed 1. 2021-02-11 21:37:53 +01:00
Stefan Monnier
29c47ac19a * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Break cycles
* test/lisp/emacs-lisp/macroexp-tests.el: New file.
2021-02-10 16:06:24 -05:00
Andrea Corallo
2fcb85c3e7 Merge remote-tracking branch 'savannah/master' into HEAD 2021-02-10 21:56:55 +01:00
Stefan Monnier
2e5d400ca6 * lisp/emacs-lisp/edebug.el: Tweak last change
Use generic functions i.s.o `edebug--spec-op-function`.

<toplevel>: No need to register the &foo and :foo handler any more.
(edebug--handle-&-spec-op, edebug--handle-:-spec-op): New generic functions.
(edebug-match-specs): Use them.
(edebug--get-spec-op): Remove function.
(edebug-match-&optional, edebug-match-&rest, edebug-match-&or)
(edebug-match-&not, edebug-match-&key, edebug-match-&error)
(edebug-match-&define): Turn functions into methods of
`edebug--handle-&-spec-op`.
(edebug-match-:name, edebug-match-:unique): Turn functions into methods of
`edebug--handle-:-spec-op`.
2021-02-10 13:12:09 -05:00
Stefan Monnier
d6eddf2c07 * list/emacs-lisp/edebug.el: Don't overload edebug-form-spec
The `edebug-form-spec` symbol property was used to store two different things:
the handlers for spec elements like `body` and the handlers for
spec operators like `&or`.  But these two sets use different calling
conventions, so they're fundamentally incompatible.

So, move the handlers to spec operators to the new property
`edebug--spec-op-function`.  This unbreaks Edebugging of:

    (cl-flet ((f (&rest x) x)) 3)

* lisp/emacs-lisp/edebug.el <toplevel>: Split the alist of built in
spec elements into normal spec element and spec ops.
(edebug--get-spec-op): New function.
(edebug-match-specs): Use it.
(edebug-match-:name): Rename from `edebug-match-colon-name`.
2021-02-10 12:36:36 -05:00
Mattias Engdegård
f3ae26cb2a Fix local defvar scoping error (bug#46387)
This bug was introduced by the lexical variable constant propagation
mechanism.  It was discovered by Michael Heerdegen.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-let-form)
(byte-optimize-body): Let the effects of a local defvar declaration be
scoped by let and let*, not any arbitrary Lisp expression body (such
as progn).
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--get-vars)
(bytecomp-local-defvar): New test.
2021-02-10 14:47:40 +01:00
Stefan Monnier
6fd8548b16 * lisp/emacs-lisp/byte-opt.el (byte-optimize--pcase): New macro
(byte-optimize-form-code-walker): Use it.
2021-02-09 12:10:07 -05:00
Stefan Monnier
04fb1664a8 * lisp/emacs-lisp/macroexp.el: Break cycle with bytecomp/byte-opt
The recent change in macroexp triggered a cyclic dependency error
during eager macroexpansion when neither `bytecomp` nor `byte-opt` had
been byte-compiled yet.  This fixes it by moving the offending
function to macroexp.el.

* lisp/emacs-lisp/macroexp.el (macroexp--unfold-lambda): Move from
byte-opt.el and rename.
(macroexp--expand-all): Use it.

* lisp/emacs-lisp/byte-opt.el (byte-compile-unfold-lambda): Move to
macroexp.el.
(byte-compile-inline-expand, byte-optimize-form-code-walker):
* lisp/emacs-lisp/bytecomp.el (byte-compile-form):
Use `macroexp--unfold-lambda` instead.
2021-02-09 12:02:25 -05:00
Stefan Kangas
3c53d28ae1 Remove some dead, commented out code from lisp-mode.el
* lisp/emacs-lisp/lisp-mode.el (lisp-data-mode-syntax-table):
Remove code commented out since 2005.
2021-02-09 17:03:55 +01:00
Matt Armstrong
9c1e89a32c Preserve leading whitespace in `lm-commentary'.
* lisp/emacs-lisp/lisp-mnt.el (lm-commentary): Preserve leading
whitespace (bug#46364).
2021-02-09 09:10:45 +01:00
Lars Ingebrigtsen
0cc35e1431 Move all usages of values' to values--store-value'
* lisp/simple.el (eval-expression):
* lisp/progmodes/elisp-mode.el (eval-last-sexp):
* lisp/emacs-lisp/pp.el (pp-eval-expression):
* lisp/emacs-lisp/edebug.el (edebug-eval-expression):
* lisp/emacs-lisp/pp.el (pp-eval-expression):
* lisp/emacs-lisp/edebug.el (edebug-eval-expression):
* lisp/cedet/data-debug.el (data-debug-eval-expression): Use it
instead of pushing to `values' directly (bug#22066).

* lisp/subr.el (values--store-value): New function.
2021-02-09 09:04:47 +01:00
Stefan Kangas
ce35760b19 ; Minor license statement fixes 2021-02-08 09:10:57 +01:00
Mattias Engdegård
7e48430a43 ; * lisp/emacs-lisp/byte-opt.el: improved comment 2021-02-07 12:24:40 +01:00
Mattias Engdegård
765ffeb545 ; Improved commentary in the variable constprop mechanism
* lisp/emacs-lisp/byte-opt.el (byte-optimize--lexvars)
(byte-optimize--vars-outside-condition)
(byte-optimize-form-code-walker, byte-optimize-let-form):
Clarify various aspects in the variable constant-propagation code,
as kindly pointed out by Stefan Monnier.
2021-02-07 10:35:36 +01:00
Mattias Engdegård
83983b6b7a Constprop of lexical variables
Lexical variables bound to a constant value (symbol, number or string)
are substituted at their point of use and the variable then eliminated
if possible.  Example:

  (let ((x (+ 2 3))) (f x))  =>  (f 5)

This reduces code size, eliminates stack operations, and enables
further optimisations.  The implementation is conservative, and is
strongly curtailed by the presence of variable mutation, conditions
and loops.

* lisp/emacs-lisp/byte-opt.el
(byte-optimize-enable-variable-constprop)
(byte-optimize-warn-eliminated-variable): New constants.
(byte-optimize--lexvars, byte-optimize--vars-outside-condition)
(byte-optimize--vars-outside-loop, byte-optimize--dynamic-vars):
New dynamic variables.
(byte-optimize--substitutable-p, byte-optimize-let-form):
New functions.
(byte-optimize-form-code-walker): Adapt clauses for variable
constprop, and add clauses for 'setq' and 'defvar'.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-var)
(bytecomp-test-get-var, bytecomp-test-identity)
(byte-opt-testsuite-arith-data): Add test cases.
2021-02-06 20:22:24 +01:00
Lars Ingebrigtsen
c4a6f81ca4 Fix previous change in testcover.el
* lisp/emacs-lisp/testcover.el
(testcover-analyze-coverage-edebug-after): The wrapper macro is
called `1value', not `testcover-1value'.
2021-02-06 15:04:52 +01:00
Lars Ingebrigtsen
cf0869d22b Rename the `1value' symbol in testcover.el
* lisp/emacs-lisp/testcover.el: Rename the symbol `1value'
throughout the file to `testcover-1value' to allow using the
variable in code that's to be tested (bug#25471).
2021-02-06 12:28:46 +01:00
Lars Ingebrigtsen
f853f2d428 Avoid a compilation warning in iter-do
* lisp/emacs-lisp/generator.el (iter-do): Avoid a compilation
warning on using variables marked for not using (bug#31641).
Eg. (iter-do (_ i))
2021-02-06 11:31:18 +01:00
Stefan Monnier
431b098a20 * lisp/emacs-lisp/pcase.el (let): Reimplement as a pcase macro
(pcase--macroexpand, pcase--u1): Remove handling of `let` from
`pcase`s core.
2021-02-05 15:07:47 -05:00
Stefan Kangas
6bd9dbf959 * lisp/emacs-lisp/checkdoc.el: Doc fix; don't mention built-ins. 2021-02-05 02:52:52 +01:00
Lars Ingebrigtsen
9bf367e184 Improve filling of Emacs Lisp doc strings
* lisp/emacs-lisp/lisp-mode.el (lisp-fill-paragraph): When filling
a Lisp string, try to avoid filling bits that follow it
(bug#28937).
2021-02-04 16:12:41 +01:00
Lars Ingebrigtsen
e1d54bb638 Allow a :variable keyword in define-globalized-minor-mode
* doc/lispref/modes.texi (Defining Minor Modes): Document it.
* lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
Allow specifying a :variable to be used if the underlying mode has
a divergent variable to store the state (bug#29081).
2021-02-04 15:22:40 +01:00
Stefan Kangas
0d8e15757e Remove some unnecessary references to Emacs 19
* lisp/emacs-lisp/elp.el:
* lisp/mouse-copy.el:
* lisp/mouse-drag.el:
* lisp/progmodes/simula.el (simula-mode-map):
* lisp/term.el (term-matching-input-from-input-string):
* lisp/vcursor.el: Doc fix; don't mention Emacs 19.
2021-02-04 05:28:00 +01:00
Stefan Kangas
fd9516238a Remove XEmacs compat code from edebug.el
* lisp/emacs-lisp/edebug.el (edebug-window-live-p, edebug-mark):
Make obsolete.  Update callers.
2021-02-04 05:27:45 +01:00
Stefan Monnier
04ab3904ed * lisp/gnus/gnus-art.el: Fix misuse of standard-value.
* lisp/custom.el (custom--standard-value): New function.

* lisp/gnus/gnus-art.el: (gnus-article-browse-html-parts)
(gnus-article-browse-html-article):
* lisp/dired-aux.el (dired-do-find-regexp-and-replace):
* lisp/emacs-lisp/package-x.el (package-upload-buffer-internal):
* lisp/startup.el (command-line): Use it.
2021-02-02 14:39:28 -05:00
Stefan Monnier
5f612d8a1f * lisp/emacs-lisp/lisp-mode.el (lisp-mode): Also set comment-end-skip 2021-02-02 10:08:44 -05:00
chuntaro
a2de694d8a Fix |# fontification in lisp-mode
* lisp/emacs-lisp/lisp-mode.el (lisp-mode): Give the |# the
correct (font-lock-comment-delimited-face) face (bug#39820).

Copyright-paperwork-exempt: yes
2021-02-02 10:18:28 +01:00
Stefan Kangas
5f69c222f4 Prefer defvar-local in emacs-lisp/*.el
* lisp/emacs-lisp/chart.el (chart-local-object):
* lisp/emacs-lisp/easy-mmode.el (define-minor-mode)
(define-globalized-minor-mode):
* lisp/emacs-lisp/edebug.el:
* lisp/emacs-lisp/generic.el (generic-font-lock-keywords):
* lisp/emacs-lisp/re-builder.el (reb-regexp, reb-regexp-src)
(reb-overlays):
* lisp/emacs-lisp/syntax.el
(syntax-propertize-extend-region-functions): Prefer defvar-local.
2021-01-31 14:55:53 +01:00
Lars Ingebrigtsen
867b99d68f Revert "Improve fontifying of #| ... |# in `lisp-mode'"
This reverts commit 1275dc4711.

Setting comment-end isn't the correct thing to do -- it makes M-; insert that string.
2021-01-31 07:59:40 +01:00
Andrea Corallo
a8b8d220b4 Merge remote-tracking branch 'savannah/master' into native-comp 2021-01-30 14:09:37 +01:00
Lars Ingebrigtsen
1275dc4711 Improve fontifying of #| ... |# in `lisp-mode'
* lisp/emacs-lisp/lisp-mode.el (lisp-mode): Fontify the end
delimiter in #| ... |# correctly (bug#39820).
2021-01-29 07:40:06 +01:00
Lars Ingebrigtsen
0b80935d37 Fix position in empty buffers in checkdoc-file-comments-engine
* lisp/emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
Don't give invalid positions on empty buffers (bug#39987).
2021-01-29 07:04:47 +01:00
Stefan Monnier
991c8946b6 Use lexical-binding in all of lisp/emacs-lisp
* lisp/emacs-lisp/bindat.el: Use lexical-binding.
(bindat--unpack-group, bindat--length-group, bindat--pack-group):
Declare `last` and `tag` as dyn-scoped.
(bindat-unpack, bindat-pack): Bind `bindat-raw` and `bindat-idx` via
`let` rather than via the formal arglist.

* lisp/emacs-lisp/package-x.el:
* lisp/emacs-lisp/generic.el:
* lisp/emacs-lisp/eieio-opt.el:
* lisp/emacs-lisp/derived.el:
* lisp/emacs-lisp/crm.el: Use lexical-binding.

* lisp/emacs-lisp/helper.el: Use lexical-binding.
(Helper-help-map): Move initialization into declaration.

* lisp/emacs-lisp/regi.el: Use lexical-binding.
(regi-interpret): Remove unused var `tstart`.
Declare `curframe`, `curentry` and `curline` as dyn-scoped.

* lisp/emacs-lisp/shadow.el: Use lexical-binding.
(load-path-shadows-find): Remove unused var `file`.
Tighten a regexp, use `push`.

* lisp/emacs-lisp/tcover-ses.el: Use lexical-binding.  Require `ses`.
Remove correspondingly redundant declarations.
(ses--curcell-overlay): Declare.
(ses-exercise): Use `dlet` and use a properly-prefixed var name.
Fix name of `curcell-overlay` variable.

* lisp/emacs-lisp/unsafep.el: Use lexical-binding.
(unsafep): Bind `unsafep-vars` via `let` rather than via the formal arglist.
2021-01-28 14:42:21 -05:00
Stefan Monnier
30914167fd * lisp/emacs-lisp/macroexp.el (macroexp-if): Fix typo 2021-01-27 18:53:58 -05:00
Stefan Monnier
d93bca0197 * lisp/emacs-lisp/pcase.el (pcase--split-pred): Handle memq pred.
Improve handling of the `member` tests generated from (or 'a 'b 'c).
This will expand

    (pcase EXP ((and (or 1 2 3) (guard (FOO))) EXP1) (1 EXP2) (6 EXP3))

to

    (cond ((memql '(3 2 1) EXP)
           (cond ((FOO) EXP1) ((eql EXP 1) EXP2)))
          ((eql EXP 6) EXP3))

rather than to

    (cond ((memql '(3 2 1) EXP)
           (cond ((FOO) EXP1) ((eql EXP 1) EXP2) ((eql EXP 6) EXP3)))
          ((eql EXP 1) EXP2)
          ((eql EXP 6) EXP3))
2021-01-27 18:51:09 -05:00
Stefan Monnier
d168110a32 * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Perform β-reduction
Also, in `funcall` macroexpand the function before checking to see if
we can remove the `funcall`.

(macroexp-if): Trim trailing `nil` in the generated code while we're at it.
2021-01-27 18:47:28 -05:00
Lars Ingebrigtsen
a10c74fbea Fontify special forms and macros the same
* lisp/emacs-lisp/lisp-mode.el (lisp--el-match-keyword): Handle
special forms and macros the same way (bug#43265).  This makes
things like (setq a '(if a b)) be fontified correctly (i.e., not
fontified as a keyword).
2021-01-25 07:44:29 +01:00
Lars Ingebrigtsen
9503f8d96c Rewrite lisp--el-funcall-position-p to be inverse of the -not function
* lisp/emacs-lisp/lisp-mode.el (lisp--el-funcall-position-p):
Rename and rewrite to return the inverse value.  Non-inverted
predicate functions are easier to reason about.
(lisp--el-non-funcall-position-p): Make obsolete.
2021-01-24 23:25:52 +01:00
Lars Ingebrigtsen
196be2bf12 Fix macro fontification in `condition-case' handler bodies
* lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):
Fontify macros in the BODY of HANDLERS in `condition-case'
correctly (bug#43265).
2021-01-24 21:43:25 +01:00
Lars Ingebrigtsen
8f28a1b9da Tweak `condition-case' keyword highlights
* lisp/emacs-lisp/lisp-mode.el (lisp--el-non-funcall-position-p):
Tweak `condition-case' position check to skip the VAR form.
2021-01-24 21:31:09 +01:00
Andrea Corallo
b8d3ae78c5 Merge remote-tracking branch 'savannah/master' into native-comp 2021-01-24 21:05:33 +01:00
Stefan Monnier
1559cc445a Fix missing file&line info in "Unknown defun property" warnings
* lisp/emacs-lisp/byte-run.el (defmacro, defun): Use
`macroexp--warn-and-return` rather than `message`.

* lisp/emacs-lisp/macroexp.el: Fix `macroexp--compiling-p`.
(macroexp--warn-and-return): Don't try and detect repetition on forms
like `nil`.
(macroexp-macroexpand): Don't forget to bind `macroexpand-all-environment`.
2021-01-23 16:04:36 -05:00
Stefan Monnier
b41b4add7b Fix spurious "Lexical argument shadows the dynamic variable" due to inlining
Before this patch doing:

    rm lisp/calendar/calendar.elc
    make lisp/calendar/cal-hebrew.elc

would spew out lots of spurious such warnings about a `date` argument,
pointing to code which has no `date` argument in sight.  This was
because that code had calls to inlinable functions (taking a `date`
argument) defined in `calendar.el`, and while `date` is a normal
lexical var at the site of those functions' definitions, it was
declared as dynbound at the call site.

* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand):
Don't impose our local context onto the inlined function.

* test/lisp/emacs-lisp/bytecomp-tests.el: Add matching test.
2021-01-21 13:15:05 -05:00
Stefan Monnier
b9511362f5 * lisp/emacs-lisp/bytecomp.el (byte-compile--declare-var): Fix warning
Make sure the "declared after first use" is under the control of
the `lexical` option.
2021-01-20 20:17:11 -05:00
Lars Ingebrigtsen
61b716bd30 checkdoc-spellcheck-documentation-flag doc string improvement
* lisp/emacs-lisp/checkdoc.el
(checkdoc-spellcheck-documentation-flag): Mention
`ispell-kill-ispell' (bug#6221).
2021-01-20 22:15:38 +01:00
Lars Ingebrigtsen
1a6ed932d9 Revert "Always send Lisp words to checkdoc-ispell-init"
This reverts commit 93141d5813.

This would make checkdoc words be used in other flyspell
buffers.
2021-01-20 22:11:38 +01:00