summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
Commit message (Collapse)AuthorAgeFilesLines
* * Introduce `comp-fwprop-max-insns-scan' as heuristic thresholdAndrea Corallo2021-01-171-2/+13
| | | | | | | * lisp/emacs-lisp/comp.el (comp-fwprop-max-insns-scan): New constant. (comp-fwprop*): Give-up when `comp-fwprop-max-insns-scan' is exceeded.
* Make `comp-enable-subr-trampolines' effective for advices (bug#45854)Andrea Corallo2021-01-171-1/+2
| | | | | | | * src/comp.c: Copyright update. (syms_of_comp): Update `comp-enable-subr-trampolines' doc. * lisp/emacs-lisp/comp.el (comp-subr-trampoline-install): Check for `comp-enable-subr-trampolines'.
* * Set `backtrace-line-length' in async worker processesPhilip Brown2021-01-161-0/+2
| | | | | | | | | Philip Brown <pdbrown.git@gmail.com> * lisp/emacs-lisp/comp.el (comp-run-async-workers): Set backtrace-line-length in async worker processes. Copyright-paperwork-exempt: yes
* Merge remote-tracking branch 'savannah/master' into native-compAndrea Corallo2021-01-167-114/+245
|\
| * * lisp/emacs-lisp/seq.el (seq-concatenate): Unautoload (merge fix).Glenn Morris2021-01-151-3/+0
| | | | | | | | gitmerge-skip-regexp does not handle line breaks.
| * Merge from origin/emacs-27Glenn Morris2021-01-141-0/+3
| |\ | | | | | | | | | | | | | | | | | | | | | 488204cdc6 (origin/emacs-27) Remove one of recently added warnings ab... 55bc1560ac Fix assertion failure in window_box_height (Bug#45737) 27743e9e70 Fix cl-concatenate inlining 32a3758c84 Fix infloop in 'pixel-scroll-mode' 74d18957b8 Fix inhibiting the default.el loading in user init file
| | * Fix cl-concatenate inliningEli Zaretskii2021-01-091-0/+3
| | | | | | | | | | | | | | | * lisp/emacs-lisp/seq.el (seq-concatenate): Auto-load it. Do not merge to master. (Bug#45610)
| * | * lisp/emacs-lisp/eieio-base.el: Silence warnings in last changeStefan Monnier2021-01-111-54/+54
| | | | | | | | | | | | | | | (eieio-persistent-make-instance): Quote the `eieio-named` class name. (eieio-named): Move before `eieio-persistent`.
| * | eieio-base.el:Eric Ludlam2021-01-111-7/+22
| | | | | | | | | | | | | | | | | | | | | (eieio-persistent-make-instance): Save the backward compatible 'name' of objects saved in the file, and if the newly loaded class inherits from 'eieio-named', restore the name of the object. Author: Eric Ludlam <zappo@gnu.org>
| * | Hyperlink symbol names without word syntax in HelpBasil L. Contovounesios2021-01-101-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2) (lisp-cl-font-lock-keywords-2): Allow single-character symbol names. * lisp/help-mode.el (help-xref-symbol-regexp): Also match symbol names starting with symbol syntax (bug#6601, bug#24309). * test/lisp/help-mode-tests.el (help-mode-tests-xref-button): Test hyperlink creation for function names without symbol syntax.
| * | Minor shortdoc link improvementsDaniel Martín2021-01-101-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/shortdoc.el (shortdoc--display-function): Use describe-function as a fallback link when a function is not documented in any Info manual. Also make the link respond to mouse-1, like the rest of *Help* links, and add a proper help-echo property. * lisp/help-fns.el (help-fns--mention-shortdoc-groups): Same link improvement as described before, this time for the shortdoc groups (bug#45750).
| * | * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Fix build of gnus-agent.elStefan Monnier2021-01-091-1/+2
| | | | | | | | | | | | Don't burp on "naked" variable let bindings.
| * | Fix cl-concatenate use in macrosEli Zaretskii2021-01-091-2/+2
| | | | | | | | | | | | | | | * lisp/emacs-lisp/cl-macs.el (inline): Remove cl-concatenate. (Bug#45610)
| * | * lisp/emacs-lisp/cl-macs.el: Optimize self-calls in tail positionStefan Monnier2021-01-081-7/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement a limited form of tail-call optimization for the special case of recursive functions defined with `cl-labels`. Only self-recursion is optimized, no attempt is made to handle more complex cases such a mutual recursion. The main benefit is to reduce the use of the stack, tho in my limited tests, this can also improve performance (about half of the way to a hand-written `while` loop). (cl--self-tco): New function. (cl-labels): Use it. * lisp/subr.el (letrec): Optimize single-binding corner case. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels): Add tests to check that TCO is working.
| * | * lisp/subr.el (letrec): Optimize some non-recursive bindingsStefan Monnier2021-01-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Look inside bytecode objects as well. * test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels): * test/lisp/subr-tests.el (subr--tests-letrec): New tests.
| * | * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix last changeStefan Monnier2021-01-081-1/+1
| | |
| * | * lisp/emacs-lisp/macroexp.el (macroexp--fgrep): Rename from `pcase--fgrep`Stefan Monnier2021-01-083-38/+42
| | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/cl-generic.el (cl--generic-fgrep): Delete. (cl--generic-lambda): Use `macroexp--pacse` instead. * lisp/emacs-lisp/pcase.el (pcase--fgrep): Rename to `macroexp--fgrep`.
* | | * Normalize `comp-eln-load-path' entries for trampoline comp (bug#43475)Andrea Corallo2021-01-141-15/+21
| | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-eln-load-path-eff): New function. (comp-trampoline-search, comp-trampoline-compile) (comp-clean-up-stale-eln): Update to use normalized `comp-eln-load-path-eff'.
* | | * Introduce native compilation time reportsAndrea Corallo2021-01-141-9/+21
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-log-time-report): New special variable. (comp--native-compile): Rework to log time reports.
* | | Improve `comp-libgccjit-reproducer'Andrea Corallo2021-01-091-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | * src/comp.c (Fcomp__compile_ctxt_to_file): Better libgccjit reproducer file name. * lisp/emacs-lisp/comp.el (comp-libgccjit-reproducer): Doc update. (comp-final, comp-run-async-workers): Pass `comp-libgccjit-reproducer' setting to child workers.
* | | Add new customize `comp-libgccjit-reproducer'Andrea Corallo2021-01-091-0/+6
| | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-libgccjit-reproducer): New customize. * src/comp.c (Fcomp__compile_ctxt_to_file): Use `comp-libgccjit-reproducer' for dumping repoducer. (syms_of_comp): Define 'Qcomp_libgccjit_reproducer'.
* | | Merge remote-tracking branch 'savannah/master' into HEADAndrea Corallo2021-01-085-62/+96
|\| |
| * | Fix obsolete variable warnings about class namesMichael Heerdegen2021-01-062-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/eieio-core.el (eieio-defclass-autoload): Try to make the wording of the warning about the obsoleted variable less confusing. * lisp/emacs-lisp/bytecomp.el (byte-compile-check-variable): Don't warn for lexical variables (Bug#39169). Fix spurious `or'. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp/warn-obsolete-variable-bound\.el): New test. * test/lisp/emacs-lisp/bytecomp-resources/warn-obsolete-variable-bound.el: New file.
| * | * lisp/emacs-lisp/package.el (package-activate-all): Another tweakStefan Monnier2021-01-051-0/+2
| | | | | | | | | | | | | | | | | | `package-quickstart.el` files presume `package-activated-list` is a bound variable, so make sure this is the case even when `package.el` is not yet loaded.
| * | * lisp/emacs-lisp/autoload.el: Improve last changeStefan Monnier2021-01-051-13/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It turns out there were other places that used `custom-initialize-delay` on autoloaded variables and used various hacks to make it work with `autoload.el`. The new code makes those hacks unneeded. Also, there's no point trying to "optimize" those rare cases anyway, so I simplified the `autoload.el` code for those cases. (make-autoload): For non-trivial cases, just include the whole `defcustom` instead of trying to mimic it. * lisp/mail/rmail.el (rmail-spool-directory): Remove hacks. * lisp/info.el (Info-default-directory-list): Remove `progn` hack. * lisp/custom.el (custom-declare-variable) (custom-handle-all-keywords): Don't use pseudo-group `nil`.
| * | * lisp/emacs-lisp/package.el: Load package-quickstart without package.elStefan Monnier2021-01-052-31/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Speed up startup when `package-quickstart` is in use by making it possible to load the quickstart file without having to load `package.el` at all. (package-user-dir, package-directory-list, package-quickstart-file): Preload those variables. (package--get-activatable-pkg): New fun, extracted from `package-activate`. (package-activate): Use it. (package--activate-all): New function, extracted from `package-activate-all`. (package-activate-all): Use it and make the function preloaded. (package--archives-initialize): New function. (package-install): Use it. (list-packages): Avoid `switch-to-buffer`. (package-get-descriptor): New function. * lisp/startup.el (command-line): Simplify the code now that package-user-dir and package-directory-list are preloaded. * lisp/emacs-lisp/autoload.el (make-autoload): Add support for `:initialize #'custom-initialize-delay` in `defcustom`.
| * | * lisp/emacs-lisp/byte-run.el (make-obsolete): Make `when` mandatoryStefan Monnier2021-01-031-20/+9
| | | | | | | | | | | | | | | (define-obsolete-function-alias, make-obsolete-variable) (define-obsolete-variable-alias): Adjust similarly.
* | | * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Fix typo.Andrea Corallo2021-01-071-1/+1
| | |
* | | Fix bug#45603Andrea Corallo2021-01-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Reported and reduced by Mauricio Collares. * lisp/emacs-lisp/comp.el (comp-final): Fix coding system for the tmp file used to pass data the child processes. * test/src/comp-tests.el (45603-1): New testcase * test/src/comp-test-45603.el : New File.
* | | Fix type inference for bug#45635Andrea Corallo2021-01-041-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr-union-1-no-mem): Fix missing mixed pos neg handling. * test/lisp/emacs-lisp/comp-cstr-tests.el (comp-cstr-typespec-tests-alist): Add a test. * test/src/comp-tests.el (45635): New testcase. * test/src/comp-test-funcs.el (comp-test-45635-f): New function.
* | | * lisp/emacs-lisp/comp.el (comp-known-predicates): Some more tweaking.Andrea Corallo2021-01-021-4/+4
| | |
* | | Fix `functionp' contraining (bug#45576)Andrea Corallo2021-01-023-11/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-known-predicates) (comp-known-predicates-h): New constants. (comp-known-predicate-p, comp-pred-to-cstr): New functions. * lisp/emacs-lisp/cl-macs.el (cl-deftype-satisfies): Don't define. * test/src/comp-tests.el (comp-test-45576): New testcase. * test/src/comp-test-funcs.el (comp-test-45576-f): New function.
* | | * Rename `dom' slot into `idom' in `comp-block' structAndrea Corallo2021-01-021-14/+14
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-block): Rename dom `slot' into `idom'. (comp-clean-ssa, comp-compute-dominator-tree) (comp-compute-dominator-frontiers, comp-dom-tree-walker) (comp-remove-unreachable-blocks): Update accordingly.
* | | Merge remote-tracking branch 'savannah/master' into HEADAndrea Corallo2021-01-0291-139/+246
|\| |
| * | Merge from origin/emacs-27Paul Eggert2021-01-011-1/+1
| |\| | | | | | | | | | 33d159c36f Fix copyright years by hand
| | * Fix copyright years by handPaul Eggert2021-01-011-1/+1
| | | | | | | | | | | | These are dates that admin/update-copyright did not update.
| | * Update copyright year to 2021Paul Eggert2021-01-0188-88/+88
| | | | | | | | | | | | Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
| * | Update copyright year to 2021Paul Eggert2021-01-0190-90/+90
| | | | | | | | | | | | Run "TZ=UTC0 admin/update-copyright".
| * | Add lexical-binding cookie to autoload filesStefan Kangas2020-12-311-1/+2
| | | | | | | | | | | | | | | | | | * build-aux/update-subdirs: * lisp/emacs-lisp/autoload.el (autoload-rubric): Add lexical-binding cookie to generated files (bug#44854).
| * | Fix some over-wide docstringsStefan Kangas2020-12-303-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/cedet/semantic/analyze/refs.el (semantic-analyze-refs-proto) (semantic-analyze-refs-impl): * lisp/cedet/semantic/symref.el (semantic-symref-hit-to-tag-via-buffer): * lisp/emacs-lisp/chart.el (chart-axis-draw): * lisp/emacs-lisp/cl-macs.el (cl-defstruct, cl-loop): * lisp/emacs-lisp/eieio-core.el (eieio--add-new-slot): * lisp/eshell/em-unix.el (eshell/info): * lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): * lisp/gnus/gnus-agent.el (gnus-agent-read-article-number): * lisp/gnus/gnus-util.el (gnus-put-overlay-excluding-newlines) (gnus-put-text-property-excluding-newlines): * lisp/gnus/message.el (message-sort-headers): * lisp/gnus/nntp.el (nntp-with-open-group) (nntp-with-open-group-function): * lisp/gnus/nnvirtual.el (nnvirtual-create-mapping): * lisp/mail/feedmail.el (feedmail-fiddle-list-of-fiddle-plexes) (feedmail-queue-reminder, feedmail-mail-send-hook-splitter): * lisp/net/dictionary.el (dictionary-do-matching): * lisp/obsolete/longlines.el (longlines-auto-wrap): * lisp/org/ob-sql.el (org-babel-sql-dbstring-vertica): * lisp/org/ol-bbdb.el (org-bbdb-date-list): * lisp/progmodes/cc-cmds.el (c-mark-function): * lisp/progmodes/cperl-mode.el (cperl-add-tags-recurse) (cperl-add-tags-recurse-noxs-fullpath) (cperl-add-tags-recurse-noxs): * lisp/progmodes/etags.el (tags-search): * lisp/progmodes/verilog-mode.el (verilog-delete-auto-buffer) (verilog-auto-re-search-do, verilog-expand-vector-internal): * lisp/textmodes/reftex-parse.el (reftex-init-section-numbers): * lisp/textmodes/reftex-toc.el (reftex-toc-load-all-files-for-promotion): * lisp/textmodes/sgml-mode.el (html-mode): * lisp/textmodes/table.el (table--transcoord-cache-to-table) (table--transcoord-table-to-cache, table--remove-eol-spaces) (table--region-in-cell-p, table-goto-bottom-right-corner) (table-split-cell-horizontally): * lisp/url/url-handlers.el (url-insert): * lisp/vc/ediff-util.el (ediff-inferior-compare-regions): Fix doc strings to not exceed 80-column limits. (Bug#44858)
| * | Also count symbol plists in memory-reportLars Ingebrigtsen2020-12-301-0/+12
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/memory-report.el (memory-report--symbol-plist): New function. (memory-report): Use it.
| * | Fill some auto-generated docstringsStefan Kangas2020-12-282-38/+43
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/easy-mmode.el (define-minor-mode) (define-globalized-minor-mode): Fill auto-generated documentation strings. (Bug#44858) * lisp/subr.el (internal--fill-string-single-line) (internal--format-docstring-line): New functions.
| * | Make byte-compiler warn about wide docstringsStefan Kangas2020-12-281-2/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p): (byte-compile-docstring-length-warn): New defuns. (byte-compile-docstring-max-column): New defcustom. (byte-compile--wide-docstring-substitution-len): New variable. (byte-compile-warning-types, byte-compile-warnings): New value 'docstrings'. (byte-compile-file-form-autoload, byte-compile-file-form-defvar): (byte-compile-file-form-defvar-function, byte-compile-lambda): (byte-compile-defvar, byte-compile-file-form-defalias): Warn about too wide docstrings. (Bug#44858) * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-warn-wide-docstring/defconst) (bytecomp-warn-wide-docstring/defvar): New tests. (bytecomp--define-warning-file-test): New macro. (bytecomp/warn-wide-docstring-autoload\.el) (bytecomp/warn-wide-docstring-custom-declare-variable\.el) (bytecomp/warn-wide-docstring-defalias\.el) (bytecomp/warn-wide-docstring-defconst\.el) (bytecomp/warn-wide-docstring-define-abbrev-table\.el) (bytecomp/warn-wide-docstring-define-obsolete-function-alias\.el) (bytecomp/warn-wide-docstring-define-obsolete-variable-alias\.el) (bytecomp/warn-wide-docstring-defun\.el) (bytecomp/warn-wide-docstring-defvar\.el) (bytecomp/warn-wide-docstring-defvaralias\.el) (bytecomp/warn-wide-docstring-ignore-fill-column\.el) (bytecomp/warn-wide-docstring-ignore-override\.el) (bytecomp/warn-wide-docstring-ignore\.el) (bytecomp/warn-wide-docstring-multiline-first\.el) (bytecomp/warn-wide-docstring-multiline\.el): New tests. * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el: New files.
| * | Do not output two spaces for non-autoloaded ieieo constructor functionsTim Landscheidt2020-12-281-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor): Amend format to avoid two spaces for non-autoloaded object constructor functions (bug#45454). Copyright-paperwork-exempt: yes
| * | * lisp/emacs-lisp/package.el (package-archives): Add NonGNU ELPAStefan Monnier2020-12-271-0/+3
| | |
* | | Add `throw' to non returning functionsAndrea Corallo2021-01-011-1/+2
| | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add throw.
* | | ; * lisp/emacs-lisp/comp.el (comp-compute-dominator-tree): Reindent.Andrea Corallo2021-01-011-25/+27
| | |
* | | * lisp/emacs-lisp/comp.el (comp-compute-dominator-tree): Fix.Andrea Corallo2021-01-011-1/+1
| | |
* | | * Clean unreachable block using dominance tree to handle circularitiesAndrea Corallo2021-01-011-35/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this commit unreachable basic blocks are pruned automatically by comp-ssa relying on dominance analysis. This solves the issue of unreachable cluster of basic blocks referencing each other. * lisp/emacs-lisp/comp.el (comp-block-lap): New `no-ret' slot. (comp-compute-dominator-tree): Update. (comp-remove-unreachable-blocks): New functions. (comp-ssa): Update to call `comp-remove-unreachable-blocks'. (comp-clean-orphan-blocks): Delete. (comp-rewrite-non-locals): Update and simplify.
* | | Introduce 'unreachable' LIMPLE operatorAndrea Corallo2021-01-011-10/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce 'unreachable' as LIMPLE operater so we can handle correctly in the CFG functions throwing values or signaling errors. * src/comp.c (retrive_block): Better error diagnostic. (emit_limple_insn): Add `unreachable'. (compile_function): Fix block iteration. (syms_of_comp): Define 'Qunreachable'. * lisp/emacs-lisp/comp.el (comp-block): New variable. (comp-block-lap): Add `non-ret-insn' slot. (comp-branch-op-p): New predicate. (comp-limple-lock-keywords): Color `unreachable' as red. (comp-compute-edges): Add `unreachable'. (comp-fwprop-call): Store non returning function call. (comp-fwprop*): Update. (comp-clean-orphan-blocks, comp-rewrite-non-locals): New functions. (comp-fwprop): Call `comp-rewrite-non-locals'. * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two tests. * test/src/comp-test-funcs.el (comp-test-non-local-1) (comp-test-non-local-2, comp-test-non-local-3) (comp-test-non-local-4): New functions.