summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* | | * Fix two predicates for missing negation handlingAndrea Corallo2021-01-011-5/+7
| | | | | | | | | | | | | | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr-empty-p) (comp-cstr-null-p): Fix missing negation handling.
* | | * lisp/emacs-lisp/comp.el (comp-limple-lock-keywords): Color returns as red.Andrea Corallo2021-01-011-0/+2
| | |
* | | * Add `comp-insert-insn'Andrea Corallo2021-01-011-6/+11
| | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-insert-insn): New inline. (comp-emit-call-cstr): Split logic and call `comp-insert-insn'.
* | | * Order function types in aphabetical orderAndrea Corallo2020-12-301-188/+173
| | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Reorder in aphabetical order and comment.
* | | * Add more function type specifiersAndrea Corallo2020-12-301-5/+239
| | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-known-type-specifiers): Add more type specifiers.
* | | Fix missing negation handling in a bunch of predicatesAndrea Corallo2020-12-291-8/+13
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-mvar-fixnum-p) (comp-mvar-symbol-p, comp-mvar-cons-p): Consider neg slot. * test/src/comp-tests.el (comp-test-not-cons): New test. * test/src/comp-test-funcs.el (comp-test-not-cons-f): New function.
* | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Better `comp-value-to-cstr'.Andrea Corallo2020-12-291-4/+7
| | |
* | | Constrain mvars under compare and branch with built-in predicatesAndrea Corallo2020-12-292-9/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-emit-assume): Update. (comp-known-predicate-p): New function. (comp-add-cond-cstrs): Extend to pattern match predicate calls. * lisp/emacs-lisp/comp-cstr.el (comp-cstr-null-p) (comp-pred-to-cstr): New function. * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a number of tests and fix comments.
* | | * Define `cl-satisfies-deftype' mapping predicate -> typeAndrea Corallo2020-12-291-1/+2
| | | | | | | | | | | | | | | * lisp/emacs-lisp/cl-macs.el (cl-satisfies-deftype): Define symbol property as reverse of `cl-deftype-satisfies'.
* | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr): Better `comp-type-to-cstr'.Andrea Corallo2020-12-291-1/+10
| | |
* | | Store function type and expose it with `subr-type'Andrea Corallo2020-12-281-7/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * src/lisp.h (struct Lisp_Subr): Add 'type' field. (SUBR_TYPE): New inline accessor. * src/pdumper.c (dump_subr): Update for 'type' field. * src/data.c (Fsubr_type): New primitive. (syms_of_data): Update. * src/comp.c (ABI_VERSION): Bump new ABI version. (make_subr): Set type. (Fcomp__register_lambda, Fcomp__register_subr) (Fcomp__late_register_subr): Receive and pass subr type to 'make_subr'. * src/alloc.c (mark_object): Mark subr type. * lisp/emacs-lisp/comp.el (comp-func): Change slot type into mvar. (comp-emit-for-top-level, comp-emit-lambda-for-top-level): Pass type mvar to subr register functions. (comp-compute-function-type): Fix-up subr type mvars. * test/src/comp-tests.el (comp-tests-check-ret-type-spec): Use `subr-type'.
* | | Reorder subr register function arguments to make some roomAndrea Corallo2020-12-281-13/+15
| | | | | | | | | | | | | | | | | | | | | | | | * src/comp.c (Fcomp__register_lambda, Fcomp__register_subr) (Fcomp__late_register_subr): Use a rest arg to pass 'doc_idx' and 'intspec' parameters. * lisp/emacs-lisp/comp.el (comp-emit-for-top-level) (comp-emit-lambda-for-top-level): Update.
* | | Propagate function calls also when hiddend under funcallAndrea Corallo2020-12-281-0/+4
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate functions also when called under `funcall'. * test/src/comp-tests.el (comp-tests-type-spec-tests): Add a test.
* | | Compute function type for native compiled functionsAndrea Corallo2020-12-281-22/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-func): `type' rename from `ret-type-specifier'. (comp-args-to-lambda-list): New function. (comp-compute-function-type): New function from `comp-ret-type-spec'. (comp-final): Update. * test/src/comp-tests.el (comp-tests-check-ret-type-spec): Update.
* | | ; lisp/emacs-lisp/comp.el (comp-emit-narg-prologue): Nit.Andrea Corallo2020-12-281-1/+1
| | |
* | | * Improve some slot type into comp.elAndrea Corallo2020-12-281-6/+5
| | | | | | | | | | | | | | | * lisp/emacs-lisp/comp.el (comp-args-base, comp-args) (comp-nargs, comp-func): Fix the type of some slots.
* | | Add 1+ 1- integer range propagation supportAndrea Corallo2020-12-272-1/+7
| | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr-one): New special var. * lisp/emacs-lisp/comp.el (comp-fwprop-call): Propagate integer ranges on +1 -1. * test/src/comp-tests.el (comp-tests-type-spec-tests): Add two tests.
* | | Add sum/subtraction integer range propagation supportAndrea Corallo2020-12-272-1/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp-cstr.el (comp-range-+, comp-range--): New functions. (comp-cstr-set-range-for-arithm): New macro. (comp-cstr-add-2, comp-cstr-sub-2, comp-cstr-add, comp-cstr-sub): New function. * lisp/emacs-lisp/comp.el (comp-fwprop-call): Wire-up + - integer range propagation.
* | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-cmp-range): Improve.Andrea Corallo2020-12-271-1/+4
| | |
* | | * Add comp-cstr-greatest-in-range comp-cstr-smallest-in-rangeAndrea Corallo2020-12-271-4/+12
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/comp-cstr.el (comp-cstr-smallest-in-range) (comp-cstr-greatest-in-range): New function. (comp-cstr->, comp-cstr->=, comp-cstr-<, comp-cstr-<=): Make use of.
* | | Merge remote-tracking branch 'savannah/master' into HEADAndrea Corallo2020-12-278-50/+139
|\| |
| * | ; Fix recent shortdoc.el and fns.c additionsBasil L. Contovounesios2020-12-271-3/+3
| | | | | | | | | | | | | | | * lisp/emacs-lisp/shortdoc.el (list): Fix typos. * src/fns.c (Flength_equal): Fix docstring.
| * | Improve "find definition" in *Help* buffersDaniel Martín2020-12-271-1/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/find-func.el (find-function-search-for-symbol): If our regexp algorithm could not find a location for the symbol definition, resort to find-function--search-by-expanding-macros. * test/lisp/emacs-lisp/find-func-tests.el: Add a automatic test for a function and variable generated by a macro. * etc/NEWS: Advertise the improved functionality (bug#45443).
| * | Add new predicates for sequence lengthsLars Ingebrigtsen2020-12-272-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * doc/lispref/sequences.texi (Sequence Functions): Document them. * lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Mark them as side-effect-free. * lisp/emacs-lisp/shortdoc.el (list): Mention them. * src/fns.c (Flength): Mention them in the doc string. (length_internal): New function. (Flength_less, Flength_greater, Flength_equal): New defuns. (syms_of_fns): Sym them.
| * | Improve the edebug-form-data doc stringLars Ingebrigtsen2020-12-261-1/+1
| | | | | | | | | | | | | | | * lisp/emacs-lisp/edebug.el (edebug-form-data): Doc string clarification (bug#42776).
| * | Fix infloop in memory-reportLars Ingebrigtsen2020-12-261-1/+3
| | | | | | | | | | | | | | | * lisp/emacs-lisp/memory-report.el (memory-report--object-size-1): Fix infloop on circular lists.
| * | Fix package reloading problems on systems with symlinksLars Ingebrigtsen2020-12-251-1/+1
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/package.el (package--files-load-history): We're comparing the truenames, so ensure that we've using that everywhere. This fixes problems when there's symlinks in the paths.
| * | Refactor package--list-loaded-files for easier debuggabilityLars Ingebrigtsen2020-12-251-24/+29
| | | | | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/package.el (package--files-load-history) (package--list-of-conflicts): Factor out from... (package--list-loaded-files): ... this function for easier debuggability.
| * | Allow `string-limit' to work on encoded stringsLars Ingebrigtsen2020-12-252-6/+31
| | | | | | | | | | | | | | | | | | | | | * doc/lispref/strings.texi (Creating Strings): Document it. * lisp/emacs-lisp/subr-x.el (string-limit): Allow limiting on encoded strings.
| * | Remove `string-slice' -- it's not very well definedLars Ingebrigtsen2020-12-252-16/+0
| | | | | | | | | | | | | | | | | | * doc/lispref/strings.texi (Creating Strings): Ditto. * lisp/emacs-lisp/subr-x.el (string-slice): Remove.
| * | * lisp/emacs-lisp/lisp-mnt.el (lm-section-end): Stop at the right headingStefan Monnier2020-12-231-0/+2
| | | | | | | | | | | | | | | `lisp-outline-level` assumes the match-data is that set by `outline-regexp`.