Commit graph

132623 commits

Author SHA1 Message Date
Paul Eggert
5b0fed956e Fix constant folding of overflows
This suppresses some byte-code optimizations that were invalid in
the presence of integer overflows, because they meant that .elc
files assumed the runtime behavior of the compiling platform, as
opposed to the runtime platform.  Problem reported by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2018-03/msg00753.html
* lisp/emacs-lisp/byte-opt.el (byte-opt--portable-max)
(byte-opt--portable-min): New constants.
(byte-opt--portable-numberp, byte-opt--arith-reduce)
(byte-optimize-1+, byte-optimize-1-): New functions.
(byte-optimize-plus, byte-optimize-minus, byte-optimize-multiply)
(byte-optimize-divide):	Avoid invalid optimizations.
(1+, 1-): Use new optimizers.
(byte-optimize-or, byte-optimize-cond): Simplify by using
remq instead of delq and copy-sequence.
2018-12-11 14:18:31 +08:00
Stefan Monnier
5a33078478 Trivial fixes for last changes to package.el and marker.c
* lisp/emacs-lisp/package.el (package-quickstart): Add missing version.
* src/marker.c (verify_bytepos): Fix typo.
2018-12-11 14:18:31 +08:00
Paul Eggert
4b68a755a4 ; Spelling fix 2018-12-11 14:18:31 +08:00
Stefan Monnier
fe90b228d7 * lisp/emacs-lisp/package.el: New quickstart feature
(package--quickstart-pkgs): New var.
(package-activate-1): Obey and fill it.
(package-activate-all): New function.
(package-initialize): Call it.
Set package-initialized before activating the packages.
(package-installed-p): Make it work before package.el is initialized in
the case where min-version is not specified.
(package-install, package-delete): Refresh the quickstart if applicable.
(package-quickstart, package-quickstart-file): New vars.
(package--quickstart-maybe-refresh, package-quickstart-refresh):
New functions.

* lisp/startup.el (command-line): Use package-activate-all rather than
package-initialize.

* doc/lispref/package.texi (Packaging Basics):
* doc/emacs/package.texi (Package Installation):
* doc/lispref/os.texi (Startup Summary): Refer to package-activate-all.
2018-12-11 14:18:31 +08:00
Stefan Monnier
29d2a98366 * src/marker.c: Try and speed up byte<->char conversion with many markers.
When considering markers (to find a starting point for the conversion),
typically one of the two bounds is nearby (coming from
cached_(byte|char)pos) but the other is far (point-min or point-max),
so change the exit condition so we stop as soon as *one* of the bounds
is near.

(BYTECHAR_DISTANCE_INITIAL, BYTECHAR_DISTANCE_INCREMENT): New constants.
(buf_charpos_to_bytepos, buf_bytepos_to_charpos): Use them to try and
reduce the number of markers we consider.
2018-12-11 14:18:31 +08:00
Michael Albinus
fdbaac529e Fix problem with trailing slash in Tramp
* lisp/net/tramp.el (tramp-handle-file-truename):
* lisp/net/tramp-adb.el (tramp-adb-handle-file-truename):
* lisp/net/tramp-sh.el (tramp-sh-handle-file-truename):
Fix problem with trailing slash.

* test/lisp/net/tramp-tests.el (tramp-test21-file-links):
Test also quoted directories.
2018-12-11 14:18:31 +08:00
Phillip Lord
39699c835e Remove architecture dependent source downloads
* admin/nt/dist-build/build-dep-zips.py:
2018-12-11 14:18:31 +08:00
Eric Skoglund
8912ca025e Make eshell/kill handle -<signal> and -<SIGNALNAME> (Bug#29156)
* lisp/eshell/esh-proc.el (eshell/kill): Handle the argument parsing
and numeric conversion in function in order to parse -signal and
-SIGNALNAME correctly.
* doc/misc/eshell.texi (kill): Update docs to reflect new function
behaviour.
* etc/NEWS: Mention new eshell/kill behaviour.
2018-12-11 14:18:31 +08:00
Noam Postavsky
3cd3c008e1 Allow &rest' or &optional' without following variable (Bug#29165)
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.
2018-12-11 14:18:30 +08:00
Vibhav Pant
233bfb562c Fix byte-optimize-memq incorrectly optimizing some memq forms.
* lisp/emacs-lisp/byte-opt.el (byte-optimize-memq): Call
  byte-optimize-and only for memq forms that can be optimized, use
  byte-optimize-predicate to optimize the final form.
2018-12-11 14:18:30 +08:00
Vibhav Pant
2f67ad35d7 Optimize certain memq forms during byte-compilation.
* lisp/emacs-lisp/byte-opt.el (byte-optimize-memq): New function.
  Set the byte optimizer function for memq to byte-optimize-memq.
2018-12-11 14:18:30 +08:00
Phillip Lord
cf14b560bd Reduce build load
* admin/nt/dist-build/build-zips.sh: Reduce parallelism to 8
2018-12-11 14:18:30 +08:00
Glenn Morris
905bb9c03d * lisp/emulation/viper.el (viper-set-hooks): Replace obsolete func. 2018-12-11 14:18:30 +08:00
Glenn Morris
49b7f742d2 * lisp/vc/vc.el (vc-initial-comment): Remove var unused since 23.2. 2018-12-11 14:18:30 +08:00
Glenn Morris
80ab3192b0 Remove some unused gnus-registry variables
* lisp/gnus/gnus-registry.el (gnus-registry-clean-empty)
(gnus-registry-use-long-group-names)
(gnus-registry-max-track-groups, gnus-registry-entry-caching)
(gnus-registry-trim-articles-without-groups):
Remove variables labeled as obsolete since 23.4 that do nothing.
2018-12-11 14:18:30 +08:00
Glenn Morris
7bb98228fc Remove variables labeled as obsolete that do nothing
* lisp/allout.el (allout-passphrase-verifier-string)
(allout-passphrase-hint-string):
* lisp/w32-vars.el (w32-list-proportional-fonts):
Remove variables that are unused since Emacs 23.x.
2018-12-11 14:18:30 +08:00
Phillip Lord
e70347ac8a Limit build load
* admin/nt/dist-build/build-zips.sh: Limit build load.
2018-12-11 14:18:30 +08:00
Phillip Lord
491c4c36cb Ensure configure is running if necessary
* admin/nt/dist-build/build-zips.sh: Check for missing Makefile.
2018-12-11 14:18:30 +08:00
Glenn Morris
c5595a1bf7 * lisp/progmodes/cc-langs.el: Silence compiler. 2018-12-11 14:18:30 +08:00
Glenn Morris
5a4b225366 Quieten lisp/obsolete compilation
* lisp/obsolete/vi.el (vi-mark-region):
* lisp/obsolete/vip.el (vip-delete-backward-char): Silence compiler.
2018-12-11 14:18:30 +08:00
Paul Eggert
f06346b0d7 Clarify syntax of radixed integers
* doc/lispref/numbers.texi (Integer Basics): Specify what digits
are allowed in radixed integers, and that there is no initial sign
or final period.
2018-12-11 14:18:30 +08:00
Glenn Morris
bc2d36aa14 Remove some declare-function stub definitions
* lisp/emulation/viper-cmd.el, lisp/emulation/viper-keym.el:
* lisp/emulation/viper-util.el, lisp/net/newst-plainview.el:
* lisp/net/newst-treeview.el, lisp/ps-def.el, lisp/vc/ediff.el:
* lisp/vc/ediff-util.el, lisp/vc/ediff-wind.el:
Remove stub declare-function definitions.
It exists since Emacs 22.2, released 10 years ago.
Most of these files are using even newer features, such as
lexical-binding and cl-lib anyway, making the stubs pointless.
2018-12-11 14:18:30 +08:00
Glenn Morris
2e4c1b997b Replace some uses of cl with cl-lib
* lisp/progmodes/idlw-toolbar.el: No need for cl.
* lisp/progmodes/antlr-mode.el, lisp/progmodes/idlw-shell.el:
* lisp/progmodes/idlwave.el: Replace cl with cl-lib.
2018-12-11 14:18:30 +08:00
Glenn Morris
d46646d95c Replace cl in some obsolete files
* lisp/obsolete/assoc.el, lisp/obsolete/fast-lock.el:
* lisp/obsolete/mouse-sel.el: No need for cl.
* lisp/obsolete/lazy-lock.el, lisp/obsolete/pgg-gpg.el:
* lisp/obsolete/pgg-parse.el, lisp/obsolete/pgg-pgp.el:
* lisp/obsolete/pgg-pgp5.el, lisp/obsolete/pgg.el:
* lisp/obsolete/sregex.el: Replace cl with cl-lib.
2018-12-11 14:18:30 +08:00
Glenn Morris
8ee4b77fbc cedet: replace cl with cl-lib
* lisp/cedet/ede/linux.el, lisp/cedet/semantic/decorate/mode.el:
* lisp/cedet/semantic/wisent/comp.el: Replace cl with cl-lib.
* lisp/cedet/cedet.el, lisp/cedet/mode-local.el:
* lisp/cedet/ede/dired.el, lisp/cedet/ede/pmake.el:
* lisp/cedet/ede/proj-comp.el, lisp/cedet/ede/proj-misc.el:
* lisp/cedet/ede/proj-obj.el, lisp/cedet/ede/proj-prog.el:
* lisp/cedet/ede/speedbar.el, lisp/cedet/semantic/analyze.el:
* lisp/cedet/semantic/complete.el:
* lisp/cedet/semantic/mru-bookmark.el, lisp/cedet/semantic/debug.el:
* lisp/cedet/semantic/wisent/python.el:
* lisp/cedet/srecode/compile.el, lisp/cedet/srecode/dictionary.el:
* lisp/cedet/srecode/srt.el: No need for cl.
2018-12-11 14:18:30 +08:00
Paul Eggert
6eddea6eb9 * src/process.c (Fsignal_process): Simplify. 2018-12-11 14:17:58 +08:00
Paul Eggert
4a805954e9 Fix too-large integer in Hg backend
* lisp/vc/vc-hg.el (vc-hg-state-fast):
Don’t assume that 2**32 - 1 is representable as a fixnum.
2018-12-11 14:17:58 +08:00
Paul Eggert
17a41a948d Avoid Fortran-style floating-point optimization
When optimizing arithmetic operations, avoid optimizations that
are valid for mathematical numbers but invalid for floating-point.
For example, do not optimize (+ 1 v 0.5) to (+ v 1.5), as they may
not be the same due to rounding errors.  In general,
floating-point numbers cannot be constant-folded, since that would
make .elc files platform-dependent.
* lisp/emacs-lisp/byte-opt.el (byte-optimize-associative-math):
Do not optimize floats.
(byte-optimize-nonassociative-math, byte-optimize-approx-equal)
(byte-optimize-delay-constants-math, byte-compile-butlast)
(byte-optimize-logmumble):
Remove; no longer used.
(byte-optimize-minus): Do not optimize (- 0 x) to (- x).
(byte-optimize-multiply): Do not optimize (* -1 x) to (- x).
(byte-optimize-divide): Do not optimize (/ x -1) to (- x).
(logand, logior, logxor): Optimize with byte-optimize-predicate
instead of with byte-optimize-logmumble.
* test/lisp/emacs-lisp/bytecomp-tests.el:
(byte-opt-testsuite-arith-data): Add a couple of test cases.
2018-12-11 14:17:58 +08:00
Michael Albinus
bdea39bd45 Instrument tramp-test39-utf8
* test/lisp/net/tramp-tests.el (tramp--test-expensive-test):
Add the test name to the template.
(tramp-test39-utf8): Instrument test.
2018-12-11 14:17:58 +08:00
Stefan Monnier
709e1da373 Fix bug#30846, along with misc cleanups found along the way
* test/src/data-tests.el (data-tests-kill-all-local-variables): New test.

* src/buffer.c (swap_out_buffer_local_variables): Remove.
Fuse the body of its loop into that of reset_buffer_local_variables.
(Fkill_buffer, Fkill_all_local_variables): Don't call it any more.
(reset_buffer_local_variables): Make sure the buffer's local binding
is swapped out before removing it from the alist (bug#30846).
Call watchers before actually killing the var.

* src/data.c (Fmake_local_variable): Simplify.
Use swap_in_global_binding to swap out any local binding, instead of
a mix of find_symbol_value followed by messing with where&found.
Don't call swap_in_symval_forwarding since the currently swapped
binding is never one we've modified.
(Fkill_local_variable): Use swap_in_global_binding rather than messing
with where&found to try and trick find_symbol_value into doing the same.

* src/alloc.c (mark_localized_symbol): 'where' can't be a frame any more.
2018-12-11 14:17:58 +08:00
Stefan Monnier
7985c87867 * src/alloc.c: Avoid O(N²) complexity when unchaining markers (bug#24548).
Unchain all dead markers with a single scan of the markers list,
instead of calling the O(N) 'unchain_marker' N times.

(unchain_dead_markers): New function.
(sweep_buffers): Use it.
(gc_sweep): Sweep buffers before markers.
(sweep_misc): Check that markers have been unchained when reclaiming them.
2018-12-11 14:17:58 +08:00
Noam Postavsky
992a8ecc09 * src/lisp.h (struct Lisp_Buffer_Local_Value): Update commentary. 2018-12-11 14:17:58 +08:00
Noam Postavsky
fe87972494 * doc/emacs/trouble.texi: Fix location of `emacs-version' index. 2018-12-11 14:17:57 +08:00
Noam Postavsky
1a1bb0c337 Explain more about (defvar foo) form (Bug#18059)
* doc/lispref/variables.texi (Defining Variables)
(Using Lexical Binding):
* doc/lispref/compile.texi (Compiler Errors): Emphasize that omitting
VALUE for `defvar' marks the variable special only locally.
* doc/lispref/variables.texi (Using Lexical Binding): Add example of
using `defvar' without VALUE.
2018-12-11 14:17:57 +08:00
Robert Pluim
21aa7529bd Make update_autogen work in git worktrees
* admin/update_autogen: Make it work in a git worktree
2018-12-11 14:17:57 +08:00
Glenn Morris
6d35e8a86a Quieten cl-lib related compiler warnings
* lisp/completion.el (cl-set-difference):
* lisp/files.el (map-merge-with, map-merge):
* lisp/emacs-lisp/radix-tree.el (map-apply): Declare.
* lisp/emacs-lisp/thunk.el: Load cl-lib at run-time, not
cl-macs at compile.
* lisp/gnus/gnus-group.el: Load cl-lib at run-time, not cl at compile.
* lisp/emacs-lisp/checkdoc.el, lisp/emacs-lisp/package.el
* lisp/gnus/gnus-sum.el, lisp/gnus/message.el, lisp/net/shr.el:
Load cl-lib at run-time.
* lisp/gnus/mml-sec.el (mml-signencrypt-style)
(mml-secure-cust-record-keys): Replace cl with cl-lib,
and load it at run-time.
* lisp/cedet/ede/linux.el, lisp/vc/vc-hg.el: Reorder requires.
2018-12-11 14:17:57 +08:00
Stefan Monnier
3ff0a07b6e Try and fix the more obvious sources of bug#30635
* 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.
2018-12-11 14:17:57 +08:00
Charles A. Roelli
73ee8d292e * doc/lispref/buffers.texi (Buffer List): Fix grammar. 2018-12-11 14:17:57 +08:00
Charles A. Roelli
219d6cf3f2 * doc/lispref/anti.texi (Antinews): Fix grammar. 2018-12-11 14:17:57 +08:00
Charles A. Roelli
9fabadf800 Add new command vc-git-stash-delete
* lisp/vc/vc-git.el (vc-git-stash-delete): New command, in line with
vc-git-stash-delete-at-point.
(vc-git-extra-menu-map): Add menu entry.
2018-12-11 14:17:57 +08:00
Glenn Morris
b36a2f9cb4 * lisp/org/ob-lisp.el (org-babel-lisp-eval-fn): Tweak type.
Avoids type mismatch when relevant library is not present/loaded.
2018-12-11 14:17:57 +08:00
Glenn Morris
4fdc730c99 sql.el defcustom fixes
* lisp/progmodes/sql.el (sql-login-params): Update.
Avoids type mismatch with postgres and sqlite login params.
(sql-postgres-login-params): Bump version.
2018-12-11 14:17:57 +08:00
Paul Eggert
0d04cb6006 Fix byte-opt lists of pure functions etc.
This fixes a bug where a byte-compiler running on 64-bit Emacs
optimized (lsh -1 -1) to #x1fffffffffffffff, an optimization
that is incorrect for .elc files intended for either 32- or
64-bit Emacs.  While I was in the neighborhood, I noticed other
glitches in the lists of pure and side-effect-free functions, and
fixed the errors that I found.
* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns):
Move some functions here from side-effect-and-error-free-fns,
since they can now signal errors.  The affected functions are
current-time-string, current-time-zone,
line-beginning-position, line-end-position.  Rename langinfo
to locale-info.  Add logcount.  Remove string-to-int.
(side-effect-and-error-free-fns): Remove minibuffer-window, a
function that can signal errors, and that is already in
side-effect-free-fns.
(pure-fns): Remove ash, lsh, and logb, since they are
platform-dependent and .elc files should be
platform-independent.  Add %, logand, logcount.  Sort.
Clarify what is meant by “pure”.
2018-12-11 14:17:57 +08:00
Paul Eggert
7f60bfed2d Port emacs-module-tests to 32-bit Emacs
Fix a portability bug when emacs-module-tests.el is byte-compiled
with a 32-bit Emacs (where #x20000000 evaluates to a
floating-point number) and then is run on a 64-bit Emacs (where
the floating-point number causes a test failure).
* test/src/emacs-module-tests.el (mod-test-sum-test):
Don’t assume #x20000000 can be represented as an Emacs integer.
2018-12-11 14:17:57 +08:00
Michael Albinus
0bf81e2387 ; Fix last commit in tramp.el 2018-12-11 14:17:57 +08:00
Eli Zaretskii
c1d88db13c Document DEFUN attributes
* doc/lispref/internals.texi (Writing Emacs Primitives): Document
specification of function attributes in DEFUN.
2018-12-11 14:17:57 +08:00
Nicolas Petton
d5a07beb15 * etc/NEWS: Add an entry for auth-source-pass. 2018-12-11 14:17:57 +08:00
Eli Zaretskii
6dbf88e276 Fix the MSDOS build
* msdos/sed2v2.inp (HAVE_SBRK): Define to 1.
2018-12-11 14:17:57 +08:00
Michael Albinus
267b82797b Fix commit c24c5dc4a4
* lisp/net/tramp.el (tramp-handle-substitute-in-file-name): Drop volume
letter of localname substitution.  Reported by Chris Zheng
<chriszheng99@gmail.com>.
2018-12-11 14:17:57 +08:00
Michael Albinus
b6d216c768 Tag tramp-test39-utf8* as :unstable
* test/lisp/net/tramp-tests.el (tramp-test39-utf8)
(tramp-test39-utf8-with-stat, tramp-test39-utf8-with-perl)
(tramp-test39-utf8-with-ls): Tag the tests as :unstable.
2018-12-11 14:17:57 +08:00