summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/bytecomp.el
Commit message (Collapse)AuthorAgeFilesLines
* Fix byte compilation of (eq foo 'default)Paul Eggert2018-06-161-9/+15
| | | | | | | | | | | | Do not use the symbol ‘default’ as a special marker. Instead, use a value that cannot appear in the program, improving on a patch proposed by Robert Cochran (Bug#31718#14). * lisp/emacs-lisp/bytecomp.el (byte-compile--default-val): New constant. (byte-compile-cond-jump-table-info) (byte-compile-cond-jump-table): Use it instead of 'default. * test/lisp/emacs-lisp/bytecomp-tests.el: (byte-opt-testsuite-arith-data): Add a test for the bug.
* Tweak recent bytecomp defvaralias changeGlenn Morris2018-04-201-2/+3
| | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-defvar-function): Respect with-no-warnings.
* * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-defvar-function):Stefan Monnier2018-04-201-0/+9
| | | | Warn about defvaralias that follows instead of precedes its var.
* Merge from origin/emacs-26Glenn Morris2018-03-281-2/+2
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 9bff405 (origin/emacs-26) * doc/misc/org.texi (Installation): Fix clo... 613c9a5 Update Org to v9.1.9 1b075a9 ; Fix some tiny doc typos 441fe20 De-obsolete `if-let' and `when-let' 8696038 * lisp/htmlfontify.el (hfy-begin-span-handler): Doc fix. 930f7b1 * doc/lispref/functions.texi (Defining Functions): Improve in... 95ccf50 Fix crash after frame is freed on macOS (bug#30800) 45d0475 More manual editing 2acb9f0 Minor manual changes changes d481cba * lisp/calculator.el (calculator-paste-decimals): Add version. 7d6c7d0 ; Use GNU not Gnu in docs 1bc4def More proofreading of the Emacs manual Conflicts: doc/misc/org.texi etc/NEWS lisp/org/org-clock.el
| * * lisp/htmlfontify.el (hfy-begin-span-handler): Doc fix.Glenn Morris2018-03-261-2/+2
| |
* | Allow `&rest' or `&optional' without following variable (Bug#29165)Noam Postavsky2018-03-251-7/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is sometimes convenient when writing macros, so that the empty variable case doesn't need to be handled specially. Older versions of Emacs accepted this in some cases (especially the interpreter in Emacs 25 and below was very accepting). | interpreted/compiled | | arglist | 25 & earlier | 26 | 27 | |---------------------------+--------------+-----+-----| | (&rest) | y/n | n/n | y/y | | (&rest &rest) | y/n | n/n | n/n | | (&rest &rest x) | y/n | n/n | n/n | | (&rest x &rest) | y/n | n/n | n/n | | (&rest x &rest y) | y/n | n/n | n/n | |---------------------------+--------------+-----+-----| | (&optional) | y/n | n/n | y/y | | (&optional &optional) | y/n | n/n | n/n | | (&optional x &optional) | y/n | n/n | n/n | | (&optional x &optional y) | y/y | n/n | n/n | |---------------------------+--------------+-----+-----| | (&optional &rest) | y/n | n/n | y/y | | (&optional x &rest) | y/n | n/n | y/y | | (&optional &rest y) | y/y | n/n | y/y | |---------------------------+--------------+-----+-----| | (&rest &optional) | y/n | n/n | n/n | | (&rest &optional y) | y/n | n/n | n/n | | (&rest x &optional y) | y/n | n/n | n/n | The values in the table above can be produced with the following code: (with-current-buffer (get-buffer-create "*ck-args*") (erase-buffer) (dolist (arglist '((&rest) (&rest &rest) (&rest &rest x) (&rest x &rest) (&rest x &rest y) (&optional) (&optional &optional) (&optional x &optional) (&optional x &optional y) (&optional &rest) (&optional x &rest) (&optional &rest y) (&rest &optional) (&rest &optional y) (&rest x &optional y))) (insert (format "%c/%c\n" (condition-case err (progn (funcall `(lambda ,arglist 'ok)) ?y) (error ?n)) (condition-case err (progn (byte-compile-check-lambda-list arglist) ?y) (error ?n)))) (display-buffer (current-buffer)))) * src/eval.c (funcall_lambda): * lisp/emacs-lisp/bytecomp.el (byte-compile-check-lambda-list): Don't check for missing variables after `&rest' and `&optional'. * test/src/eval-tests.el (eval-tests--bugs-24912-and-24913) (eval-tests-accept-empty-optional-rest): Update tests accordingly. * etc/NEWS: Update announcement accordingly. * doc/lispref/functions.texi (Argument List): Update manual to indicate that variable names are optional.
* | Try and fix the more obvious sources of bug#30635Stefan Monnier2018-03-221-12/+6
| | | | | | | | | | | | | | | | * lisp/files.el (dir-locals-read-from-dir): Handle the easy cases without loading `map`. * lisp/emacs-lisp/bytecomp.el: Don't require cl-lib at run-time. (byte-compile-and-folded): Avoid cl-every.
* | Make compiler warn about use of obsolete hooksGlenn Morris2018-03-121-0/+5
| | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-form): Warn about using obsolete hooks.
* | Let warning about (:foo) be suppressible (Bug#30499)Noam Postavsky2018-03-101-1/+2
| | | | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-form): Check byte-compile-warning-enabled-p before warning about funcalling const symbol.
* | Merge from origin/emacs-26Glenn Morris2018-02-161-0/+5
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a06a8ed (origin/emacs-26) ; * lisp/vc/vc-git.el (vc-git--program-vers... edc06ad Make 'byte-compile-error-on-warn' a safe file variable 9f5d8da ; * lisp/textmodes/flyspell.el (flyspell-auto-correct-word): ... f73905a Fix the doc string of flyspell-auto-correct-word e9c7ddc Improve the MS-Windows appendix of the Emacs manual 6ddb4bd Fix 'vc-git--program-version' 63c93f7 Fix typos and wording in the Emacs manual 42f15b0 * doc/emacs/programs.texi (Semantic): Order programming langu... b46be29 More improvements for the Emacs manual 874c0ed Minor wording change in Emacs manual 53511f9 Another set of changes for the manual 78426b8 Improvements on tramp.texi 0dca618 Tramp minor doc fixes Conflicts: doc/misc/tramp.texi
| * Make 'byte-compile-error-on-warn' a safe file variableRobert Cochran2018-02-161-0/+5
| | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-error-on-warn): Mark as a safe local variable for boolean values.
* | Fix tempfile creation when byte compilingPaul Eggert2018-01-201-11/+1
| | | | | | | | | | | | | | | | This improves on the recent fix for master failing to build on FreeBSD. Suggested by Stefan Monnier in: https://lists.gnu.org/r/emacs-devel/2018-01/msg00600.html * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Put tempfile next to the target file, as was the original intent.
* | Merge from origin/emacs-26Glenn Morris2018-01-201-1/+11
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | cfc94fd (origin/emacs-26) Don't mention 'vc-stay-local' in the user m... 8ce430b Fix a typo in calendar.texi bb748b3 Minor improvement in wording of the Emacs manual b603aff Revert "Fix tempfile creation when byte compiling" 4fd446e Fix tempfile creation when byte compiling 7f48a11 Improve the Emacs manual as suggested in emacs-manual-bugs 728ded0 * lisp/emacs-lisp/bytecomp.el: Tweak last change c6c05e2 Unbreak building Emacs on FreeBSD a41ad3d Don't unnecessarily use non-ASCII characters in C sources c28d4b6 Portability fixes in emacs-module-tests 1d50c18 Add tests for term.el
| * Revert "Fix tempfile creation when byte compiling"Eli Zaretskii2018-01-201-1/+11
| | | | | | | | | | | | This reverts commit 4fd446e9f65e5531b18d4a0c5e08a6eeabc292d8: * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Put tempfile next to the target file, as was the original intent.
| * Fix tempfile creation when byte compilingPaul Eggert2018-01-191-11/+1
| | | | | | | | | | | | | | | | This improves on the recent fix for master failing to build on FreeBSD. Suggested by Stefan Monnier in: https://lists.gnu.org/r/emacs-devel/2018-01/msg00600.html * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Put tempfile next to the target file, as was the original intent.
| * * lisp/emacs-lisp/bytecomp.el: Tweak last changeStefan Monnier2018-01-191-7/+7
| | | | | | | | (byte-compile-file): Move comment closer to the code it describes.
| * Unbreak building Emacs on FreeBSDEli Zaretskii2018-01-191-1/+11
| | | | | | | | | | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Don't create the temporary file under temporary-file-directory if the file being compiled is specified by an absolute file name. This avoids problems with ACL copying from temporary-file-directory on FreeBSD. For the details, see http://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00513.html.
* | Revert "Fix command repetition with lexical-binding (Bug#29334)"Noam Postavsky2018-01-061-1/+6
| | | | | | | | | | | | | | | | | | It does not work with more complicated interactive forms, because byte-compile-lambda actually receives an intermediate form of code rather than valid lisp source (Bug#29988). * src/callint.c (Fcall_interactively): * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Revert previous change, and update commentary.
* | Fix command repetition with lexical-binding (Bug#29334)Noam Postavsky2018-01-031-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `call-interactively' relies on analyzing the source of `interactive' forms in order to preserve arguments like (region-end) in the command history, rather than just storing the resulting position. However, the byte-compiler does not preserve the source of the interactive form when lexical-binding is in effect, because `call-interactively' would evaluate the form with dynamic binding in that case. To fix this, change `call-interactively' so that it checks compiled functions for lexical-binding as well. Then the byte-compiler can preserve the source of interactive forms regardless of the value of lexical-binding. * src/callint.c (Fcall_interactively): Functions compiled with lexical-binding have their arglist encoded as an integer, use this to choose the right kind of binding for compiled functions too. * lisp/emacs-lisp/bytecomp.el (byte-compile-lambda): Preserve the uncompiled form of the interactive form when lexical-binding is enabled too.
* | Merge from origin/emacs-26Paul Eggert2018-01-011-1/+1
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 63b04c11d5 Fix copyright years by hand 5c7dd8a783 Update copyright year to 2018 220a9ecba1 Merge from Gnulib 312c565566 Don't add empty keyboard macro to macro ring (Bug#24992) 39ca289a7a Allow customization of decoding of "man" command f8240815ea * etc/NEWS: Add security consideration note on passphrase ... 0c78822c70 Fix subtle problem with scroll-down when scroll-margin is ... acd289c5a4 Fix problems with indexing in User manual b240c7846b * lisp/help.el (describe-key): Only (copy-sequence elt) wh... e879a5444a * src/buffer.c (Frestore_buffer_modified_p): Fix bug#29846 81b1028b63 Improve documentation of 'inhibit-modification-hooks' and ... 7175496d7a Fix doc string of 'enable-recursive-minibuffers' 5b38406491 Fix documentation of delsel and of killing text # Conflicts: # etc/NEWS # etc/refcards/ru-refcard.tex
| * Update copyright year to 2018Paul Eggert2018-01-011-1/+1
| | | | | | | | Run admin/update-copyright.
* | Merge from origin/emacs-26Glenn Morris2017-12-201-1/+1
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b3f4a3a (origin/emacs-26) Special-case %DUMBFW for GnuTLS between 3.2... c2ae057 Work around GnuTLS version issues with %DUMBFW (tiny change) 2f9d9ef ; Remove the mention of "plain C code" in the docstring as well aca827b Merge branch 'widen-less' into emacs-26 87548f5 ; Rephrase NEWS entry a bit da0d773 (emacs-26) ; * lisp/erc/erc.el: Update URL. 3a60515 * lisp/erc/erc.el (erc-shorten-server-name): Silence compiler... 471b6c1 ; Replace non-ascii quote characters in doc strings etc 7af7f5e Fix some more aliases to user options 79fb4b5 Fix some flymake aliases b9fbc03 (origin/widen-less) Widen in indent-for-tab-command in the no... 446faf3 Replace the mention of c-indent-defun with js-indent-line 7e9eef0 Consolidate 'widen' calls # Conflicts: # etc/NEWS # lisp/progmodes/flymake-proc.el
| * ; Replace non-ascii quote characters in doc strings etcGlenn Morris2017-12-201-1/+1
| |
* | Merge from origin/emacs-26Glenn Morris2017-12-161-0/+1
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 28e0261890 * lisp/progmodes/cc-defs.el (c-version): Update to 5.33.1. ac53084f9b Improve fix for Bug#29712 ffd4771560 * doc/lispref/sequences.texi (Sequence Functions): Improve... f274cbd185 Avoid reordering of output in 'shr-insert-document' 7890864413 Improve documentation of 'invisible-p' a1327bbc64 Remove one more check that Vframe_list is non-nil 63b6281fdd Fix off-by-one error in 'css--hex-color' 804b37ca63 Save and restore text-pixel height and width of frames (Bu... 777fe94661 Partially revert "Mention new strictness for &optional, &r... ad17db7964 * lisp/vc/smerge-mode.el (smerge-refine): Respect font-loc... 5a7d0095a4 * lisp/vc/smerge-mode.el (smerge-refine): Replace obsolete... e019c35df6 FOR_EACH_FRAME no longer assumes frame-list d64b88da2f * src/font.c (Ffont_info): Doc fix. (Bug#29682) 92b2604a7f Modernise message.el face spec syntax b1efbe6564 Update message.el obsolete face aliases 2494c14e76 ; * lisp/comint.el (comint-terminfo-terminal): Add a :vers... 12ad276d15 Improve documentation of TERM environment variable 8ed529f0f3 Add option to configure comint TERM 889f07c352 Better support utf-8-with-signature and utf-8-hfs in XML/HTML a2697fac0e * lisp/menu-bar.el (menu-bar-mode): Doc fix. ffb50eace6 ; * etc/NEWS: Fix last change. 95606af8b0 Fix Bug#29712 in tramp-tests.el 9bf66c6bee Don't run FOR_EACH_FRAME when there's no frame left (Bug#2... c2a88ec8e8 * lisp/textmodes/tex-mode.el: Ensure uncompiled file is lo... b178870528 Remember password change for IMAP in Gnus (Bug#29692) a21dac18bb Add %DUMBFW to the default GnuTLS priority strings 780407cff1 Small fixes prompted by make check-declare 541a60108d Fix some custom groups e220d6e112 Fix fontification of first declaration within a C++ lambda... aa66da220c * src/data.c (Fadd_variable_watcher): Doc fix. f838210b01 Fix misfontification of C++ member initialization list aft... 232c6465ce Fix doc-string of Fbuffer_list 3f9aac68d7 Don't raise an extraneous frame (bug#29696) e7b1111155 Mention new strictness for &optional, &rest in arglists (B... 4cb8696e47 Don't misfontify "foo ()" inside C++ initialization parent... ce31e726ad Fixes for defcustoms, prompted by cus-test-opts aacd1e14fc * lisp/net/newst-backend.el (newsticker--raw-url-list-defa... 7e2f4d3d41 * lisp/htmlfontify.el (hfy-which-etags): Fix it. 52d2a690f6 Add missing :version tags revealed by cusver-check f5d0360234 Escape column-zero doc parens # Conflicts: # etc/NEWS
| * Add missing :version tags revealed by cusver-checkGlenn Morris2017-12-121-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/comint.el (comint-move-point-for-matching-input): * lisp/epa.el (epa-replace-original-text): * lisp/image-dired.el (image-dired-cmd-optipng-program) (image-dired-cmd-optipng-options): * lisp/emacs-lisp/bytecomp.el (byte-compile-cond-use-jump-table): * lisp/gnus/gnus-cloud.el (gnus-cloud-storage-method) (gnus-cloud-interactive): * lisp/net/mailcap.el (mailcap-user-mime-data): * lisp/progmodes/cc-vars.el (c-asymmetry-fontification-flag) (c-noise-macro-names, c-noise-macro-with-parens-names): * lisp/progmodes/flymake.el (flymake-start-on-flymake-mode) (flymake-wrap-around): * lisp/progmodes/grep.el (grep-use-null-filename-separator): * lisp/progmodes/js.el (js-indent-align-list-continuation): * lisp/progmodes/perl-mode.el (perl-flymake-command): * lisp/progmodes/python.el (python-flymake-command) (python-flymake-command-output-pattern, python-flymake-msg-alist): * lisp/progmodes/ruby-mode.el (ruby-flymake-use-rubocop-if-available) (ruby-rubocop-config): * lisp/textmodes/less-css-mode.el (less-css): * lisp/textmodes/tex-mode.el (tex-chktex-program) (tex-chktex-extra-flags): Add missing :version tags.
* | Automatically evaluate top-level define-obsolete-function-alias etcGlenn Morris2017-12-151-0/+6
| | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-make-obsolete): New handler.
* | Raise an error when detecting old-style backquotes.Philipp Stephani2017-12-091-7/+1
|/ | | | | | | | | | | | | | | | | | | | | | | | | They have been deprecated for a decade now. * src/lread.c (Fload): Don't use record_unwind_protect to warn about old-style backquotes any more. They now generate a hard error. (read1): Signal an error when detecting old-style backquotes. Remove unused label. (syms_of_lread): Remove unused internal variable 'lread--old-style-backquotes'. (load_error_old_style_backquotes): Rename from 'load_warn_oldstyle_backquotes'. Signal an error. * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Remove check from byte compiler. It isn't triggered any more. * test/src/lread-tests.el (lread-tests--old-style-backquotes): Adapt unit test. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--old-style-backquotes) (bytecomp-tests-function-put): Adapt unit tests. * etc/NEWS: Document change.
* Fix byte compilation of files with leading directoriesEli Zaretskii2017-12-021-1/+2
| | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Pass basename of target-file to make-temp-file, in case target-file includes a leading directory that might not exist under TMPDIR. See http://lists.gnu.org/archive/html/emacs-devel/2017-11/msg00680.html for the details.
* ; * lisp/emacs-lisp/bytecomp.el: Tweak message formatting in previous.Glenn Morris2017-11-291-1/+3
|
* Restore obsolete method of changing byte-compile-dest-fileGlenn Morris2017-11-291-0/+5
| | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-dest-file): Restore seven-year obsolete feature that was removed for six months, since automake uses it.
* ; * lisp/emacs-lisp/bytecomp.el (byte-compile-dest-file):Glenn Morris2017-11-271-1/+1
| | | | Fix typo in previous.
* A few small doc fixes for bytecomp.elGlenn Morris2017-11-271-4/+11
| | | | | * lisp/emacs-lisp/bytecomp.el (emacs-lisp-file-regexp) (byte-compile-dest-file-function, byte-compile-dest-file): Doc fixes.
* Hook Flymake onto proper checkdoc and byte-compile interfacesJoão Távora2017-10-031-0/+22
| | | | | | | | | | | | | | | | | | | | | The interfaces in bytecomp.el and checkdoc.el are mostly boilerplate, with little knowledge of actual internals or thought given to the usefulness of said interfaces in contexts other than Flymake's. * lisp/emacs-lisp/bytecomp.el (byte-compile-log-warning-function): New variable. (byte-compile-log-warning): Use it. (byte-compile--log-warning-for-byte-compile): New function. * lisp/emacs-lisp/checkdoc.el (checkdoc-create-error-function): New variable. (checkdoc-create-error): Use it. (checkdoc--create-error-for-checkdoc): New function.xo * lisp/progmodes/flymake-elisp.el (flymake-elisp--checkdoc-1): Use checkdoc-create-error-function. (flymake-elisp--batch-byte-compile): Use byte-compile-log-warning-function.
* Prefer HTTPS to FTP and HTTP in documentationPaul Eggert2017-09-131-1/+1
| | | | | | | | | | | | | Most of this change is to boilerplate commentary such as license URLs. This change was prompted by ftp://ftp.gnu.org's going-away party, planned for November. Change these FTP URLs to https://ftp.gnu.org instead. Make similar changes for URLs to other organizations moving away from FTP. Also, change HTTP to HTTPS for URLs to gnu.org and fsf.org when this works, as this will further help defend against man-in-the-middle attacks (for this part I omitted the MS-DOS and MS-Windows sources and the test tarballs to keep the workload down). HTTPS is not fully working to lists.gnu.org so I left those URLs alone for now.
* Support lazy loading for autogenerated usage docstrings too (Bug#27748)Noam Postavsky2017-08-301-1/+1
| | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-file-form-defmumble): Consider any documentation that ended up in code as a docstring (e.g., autogenerated (fn ARG1 ARG2) type things), not just what the user passed.
* Minor simplification for byte-compile-constant-pushNoam Postavsky2017-08-291-5/+4
| | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-constant): Move the meat of the code from here... (byte-compile-constant-push): ... to here. No need to bind byte-compile--for-effect anymore.
* Fix over-protection of byte-compiled filesPaul Eggert2017-08-261-0/+5
| | | | | | | | | | Problem reported by Sven Joachim (Bug#28244). Also, fix similar problem for autoload files. * lisp/emacs-lisp/autoload.el (autoload--save-buffer): Set temp file modes to the buffer-file-name file modes (or 666 if not available) as adjusted by umask. * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Set temp file modes to 666 as adjusted by umask.
* Stop printing '4' in .elc files after 'define-symbol-prop' callsNoam Postavsky2017-08-191-1/+2
| | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-define-symbol-prop): Return nil in case we have compiled the form, to prevent a redundant constant from getting added to the compiled output.
* Let `define-symbol-prop' take effect during compilationStefan Monnier2017-08-071-0/+29
| | | | | | | | | | | | * src/fns.c (syms_of_fns): New variable `overriding-plist-environment'. (Fget): Consult it. * lisp/emacs-lisp/bytecomp.el (byte-compile-close-variables): Let-bind it to nil. (byte-compile-define-symbol-prop): New function, handles compilation of top-level `define-symbol-prop' and `function-put' calls by putting the symbol setting into `overriding-plist-environment'. Co-authored-by: Noam Postavsky <npostavs@gmail.com>
* Fix a couple of make-temp-file racesPaul Eggert2017-08-051-19/+21
| | | | | | | | | * lisp/emacs-lisp/autoload.el (autoload--save-buffer): * lisp/emacs-lisp/bytecomp.el (byte-compile-file): Use make-temp-file, not make-temp-name, to avoid an unlikely race that could lose data. Remove the deletion hook as quickly as possible after the file is renamed; though a race still remains here, it is smaller than before.
* * lisp/emacs-lisp/bytecomp.el: Fix bug#14860.Stefan Monnier2017-07-141-28/+15
| | | | | | | | | | | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile--function-signature): New fun. Dig into advice wrappers to find the "real" signature. (byte-compile-callargs-warn, byte-compile-arglist-warn): Use it. (byte-compile-arglist-signature): Don't bother with "new-style" arglists, since bytecode functions are now handled in byte-compile--function-signature. * lisp/files.el (create-file-buffer, insert-directory): Remove workaround introduced for (bug#14860). * lisp/help-fns.el (help-fns--analyse-function): `nadvice` is preloaded. * lisp/help.el (help-function-arglist): Dig into advice wrappers to find the "real" signature.
* Implement field numbers in format stringsPhilipp Stephani2017-06-021-3/+8
| | | | | | | | | | | | | | | A field number explicitly specifies the argument to be formatted. This is especially important for potential localization work, since grammars of various languages dictate different word orders. * src/editfns.c (Fformat): Update documentation. (styled_format): Implement field numbers. * doc/lispref/strings.texi (Formatting Strings): Document field numbers. * lisp/emacs-lisp/bytecomp.el (byte-compile-format-warn): Adapt. * test/src/editfns-tests.el (format-with-field): New unit test.
* Don't attempt to recover from undefined behavior in some casesPhilipp Stephani2017-05-271-0/+8
| | | | | | | | | | | | | These functions can only be run in batch mode and exit Emacs on return, so nothing can be recovered. Disable unsafe recover mechanisms so that we get real failures and good stack traces on fatal signals. * lisp/emacs-lisp/bytecomp.el (batch-byte-compile) (batch-byte-recompile-directory): * lisp/emacs-lisp/ert.el (ert-run-tests-batch-and-exit) (ert-summarize-tests-batch-and-exit): Don't attempt to recover from undefined behavior.
* Don't save unrelated buffers before recompiling directory (Bug#25964)Andreas Politz2017-05-201-1/+6
| | | | | * lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Only save buffers visiting lisp files under the directory being compiled.
* Make `old-style-backquotes' variable internalPhilipp2017-05-131-2/+2
| | | | | | | | | | | | | * src/lread.c (load_warn_old_style_backquotes, Fload, read1) (syms_of_lread): Rename `old-style-backquotes' to `lread--old-style-backquotes', and clarify that it's for internal use only. * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Rename variable. * test/src/lread-tests.el (lread-tests--old-style-backquotes): Add unit test. * emacs-lisp/bytecomp-tests.el (bytecomp-tests--old-style-backquotes): Add unit test.
* Improve unescaped character literal warningsPhilipp Stephani2017-05-131-1/+1
| | | | | | | | | | | * src/lread.c (load_warn_unescaped_character_literals) (syms_of_lread): lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Improve formatting of unescaped character literal warnings. * test/src/lread-tests.el (lread-tests--unescaped-char-literals): test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--unescaped-char-literals): Adapt unit tests.
* Remove obsolete method of changing byte-compile-dest-fileGlenn Morris2017-05-061-14/+9
| | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-dest-file): Define unconditionally.
* Warn about missing backslashes during loadPhilipp Stephani2017-05-011-0/+7
| | | | | | | | | | | | | | | | * src/lread.c (load_warn_unescaped_character_literals, Fload, read1) (syms_of_lread): Warn if unescaped character literals are found (Bug#20152). * lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Check for unescaped character literals during byte compilation. * test/src/lread-tests.el (lread-tests--unescaped-char-literals): New unit test. (lread-tests--with-temp-file, lread-tests--last-message): Helper functions for unit test. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--unescaped-char-literals): New unit test. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--with-temp-file): Helper macro for unit test.
* b-c--cond-jump-table-info: Use correct body for singleton clausesVibhav Pant2017-04-221-2/+2
| | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-cond-jump-table-info): When a clause's body consists of a single constant expression, use that expression as the body to be compiled. This fixes switch bytecode evaluating to nil to such clauses.
* bytecomp: Don't inline functions that use byte-switch (Bug#26518)Vibhav Pant2017-04-201-40/+46
| | | | | | | * lisp/emacs-lisp/bytecomp.el (byte-compile-unfold-bcf): Don't inline FORM if the bytecode uses the byte-switch instruction. It is impossible to guess the correct stack depth while inlining such bytecode, resulting in faulty code.