Commit graph

5307 commits

Author SHA1 Message Date
Stefan Monnier
cc30d77ecd Let `define-symbol-prop' take effect during compilation
* 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>
2017-08-07 18:54:49 -04:00
Noam Postavsky
0508045ed7 Don't error on circular values in testcover
* lisp/emacs-lisp/testcover.el (testcover-after, testcover-1value):
Consider circular lists to be non-equal instead of signaling error.
2017-08-07 18:54:44 -04:00
Alexander Gramiak
054c198c12 Catch argument and macroexpansion errors in ert
This kludge catches errors caused by evaluating arguments in ert's
should, should-not, and should-error macros; it also catches
macroexpansion errors inside of the above macros (Bug#24402).

* lisp/emacs-lisp/ert.el: (ert--should-signal-hook): New function.
(ert--expand-should-1): Catch macroexpansion errors.
* test/lisp/emacs-lisp/ert-tests.el (ert-test-should-error-argument)
(ert-test-should-error-macroexpansion): Tests for argument and
expansion errors.
2017-08-07 18:43:54 -04:00
Paul Eggert
785a4a1d52 Fix a couple of make-temp-file races
* 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.
2017-08-05 21:28:09 -07:00
Eli Zaretskii
c3ac93bb9f Make header line in some modes be sensitive to display-line-numbers
* lisp/ruler-mode.el (ruler-mode-ruler, ruler-mode-window-col):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-init-header)
(tabulated-list-print-entry): Account for the width taken by
line-number display.  (Bug#27895)
2017-08-05 14:22:04 +03:00
Noam Postavsky
12d7757a79 ; * lisp/emacs-lisp/re-builder.el: Fix commentary (Bug#27947). 2017-08-04 18:36:05 -04:00
Toby S. Cubitt
4b7f822cd5 Implement iterator generator for avl-trees.
* lisp/emacs-lisp/avl-tree.el (avl-tree-iter): New iter-defun.
2017-08-04 20:39:05 +01:00
Stefan Monnier
bfb8d33fd1 * lisp/subr.el (define-symbol-prop): New function
(symbol-file): Make it find symbol property definitions.

* lisp/emacs-lisp/pcase.el (pcase-defmacro):
* lisp/emacs-lisp/ert.el (ert-set-test): Use it instead of `put'.
(ert-describe-test): Adjust call to symbol-file accordingly.
2017-07-28 12:02:01 -04:00
Stefan Monnier
b2225a374f * lisp/subr.el (method-files): Move function to cl-generic.el
* lisp/emacs-lisp/cl-generic.el (cl-generic-p): New function.
(cl--generic-method-files): New function, moved from subr.el.
* lisp/emacs-lisp/edebug.el (edebug-instrument-function): Use them.
* test/lisp/emacs-lisp/cl-generic-tests.el:
* test/lisp/subr-tests.el: Move and adjust method-files tests accordingly.
2017-07-28 11:28:48 -04:00
Stefan Monnier
955e0cbb32 * lisp/loadhist.el (unload-feature): Remove ad-hoc ELP code
* lisp/emacs-lisp/elp.el (loadhist-unload-element): Un-instrument functions.
2017-07-27 22:51:37 -04:00
Stefan Monnier
86c862767d * lisp/emacs-lisp/cl-generic.el (cl-generic-define-method):
Record this as the function's definition site if it's the first def.
2017-07-26 23:22:58 -04:00
Glenn Morris
e19e1f9d4b Stop using unibyte buffers for ert backtraces
* lisp/emacs-lisp/ert.el
(ert-results-pop-to-backtrace-for-test-at-point):
Set multibyte true, not false.  This copies a
debugger-setup-buffer change from 2009-08-30, and stops the
"Backtrace for" header line containing ^X and ^Y.
2017-07-26 12:38:46 -04:00
Grégoire Jadi
325ad16fe0 Fix cl-defmethod indentation
* lisp/emacs-lisp/cl-generic.el (cl-defmethod):
Declare (indent defun).  Fixes bug#23994.
2017-07-26 18:46:37 +03:00
Stefan Monnier
24b91584c2 * lisp/emacs-lisp/eieio-compat.el (eieio--defgeneric-init-form):
Adjust to change in cl-generic-ensure-function.
2017-07-25 10:12:58 -04:00
Stefan Monnier
69fb12a66b (loadhist-unload-element): Move ERT and cl-generic methods
* lisp/loadhist.el (loadhist-unload-element): Don't define cl-generic
and ert methods here.
(loadhist-unload-element) <(head define-type)>: Remove unused var `slots'.

* lisp/emacs-lisp/cl-generic.el (loadhist-unload-element): Define
unload method for cl-defmethod.
(cl-generic-ensure-function): Remove redundant `defalias'.

* lisp/emacs-lisp/ert.el (ert-set-test): Move the current-load-list
setting here...
(ert-deftest): ...from here.
(loadhist-unload-element): Define unload method for ert-deftest.
2017-07-24 15:58:30 -04:00
Philipp Stephani
ad4eff3b90 Add 'rx' pattern for pcase.
* lisp/emacs-lisp/rx.el (rx): New pcase macro.
* test/lisp/emacs-lisp/rx-tests.el (rx-pcase): Add unit test.
2017-07-23 22:32:23 +02:00
Charles A. Roelli
d37a82b4a3 ElDoc: add docstrings and minor refactoring
* lisp/emacs-lisp/eldoc.el (eldoc-edit-message-commands): Add
docstring.
(turn-on-eldoc-mode): Fix capitalization.
(eldoc--supported-p): Add docstring.
(eldoc-schedule-timer): Add docstring and use
'eldoc--supported-p'.
(eldoc-message): Add docstring and make calling convention
clearer.
(eldoc--message-command-p):
(eldoc-pre-command-refresh-echo-area):
(eldoc-display-message-p):
(eldoc-display-message-no-interference-p):
(eldoc-print-current-symbol-info):
(eldoc-docstring-format-sym-doc):
(eldoc-add-command, eldoc-add-command-completions):
(eldoc-remove-command, eldoc-remove-command-completions):
Add docstring.  (Bug#27230)
2017-07-22 11:09:36 +03:00
Stefan Monnier
24bd52565a * lisp/emacs-lisp/nadvice.el (advice--defalias-fset): Strip advices
This tries to make sure that (defalias F (symbol-function F)) stays a no-op.
2017-07-18 14:07:41 -04:00
Glenn Morris
5ab91020fb Use a more specific test for running on hydra.nixos.org
* lisp/emacs-lisp/ert.el (ert-summarize-tests-batch-and-exit):
* test/Makefile.in (WRITE_LOG):
* test/lisp/filenotify-tests.el:
* test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
(eieio-test-method-order-list-6):
* test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
(eieio-test-37-obsolete-name-in-constructor):
* test/lisp/net/tramp-tests.el: Replace NIX_STORE with EMACS_HYDRA_CI.
2017-07-18 12:53:46 -04:00
Stefan Monnier
fa72de6cf7 * emacs-lisp/cl-lib.el (cl--old-struct-type-of): Accept `[]' 2017-07-18 12:01:27 -04:00
Tino Calancha
5e2ae74df5 * lisp/emacs-lisp/map.el (map-put): Fix redundancy in docstring. 2017-07-17 22:01:17 +09:00
Tino Calancha
76e1f7d00f alist-get: Add optional arg TESTFN
If TESTFN is non-nil, then it is the predicate to lookup
the alist.  Otherwise, use 'eq' (Bug#27584).
* lisp/subr.el (alist-get): Add optional arg FULL.
* lisp/emacs-lisp/map.el (map-elt, map-put): Add optional arg TESTFN.
* lisp/emacs-lisp/gv.el (alist-get): Update expander.
* doc/lispref/lists.texi (Association Lists): Update manual.
* etc/NEWS: Announce the changes.
* test/lisp/emacs-lisp/map-tests.el (test-map-put-testfn-alist)
(test-map-elt-testfn): New tests.
2017-07-17 21:30:50 +09:00
Stefan Monnier
6e2d6d54e1 * lisp/emacs-lisp/bytecomp.el: Fix bug#14860.
* 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.
2017-07-14 11:27:21 -04:00
Stefan Monnier
0f3cc0b824 * lisp/emacs-lisp/cl-lib.el (cl--random-time): Remove as well
It's also defined in cl-extra.el.
2017-07-14 10:29:10 -04:00
Paul Eggert
6443a95ad7 Remove duplicate cl--random-state definition
* lisp/emacs-lisp/cl-lib.el (cl--random-state): Remove.
This variable is now defined in cl-extra.el (Bug#27617).
2017-07-14 02:47:48 -07:00
Paul Eggert
083940a93d Fix core dump in substitute-object-in-subtree
Without this fix, (substitute-object-in-subtree #0=(#0# 'a) 'a)
would dump core, since the C code would recurse indefinitely through
the infinite structure.  This patch adds an argument to the function,
and renames it to lread--substitute-object-in-subtree as the function
is not general-purpose and should not be relied on by outside code.
See Bug#23660.
* src/intervals.c (traverse_intervals_noorder): ARG is now void *,
not Lisp_Object, so that callers need not cons unnecessarily.
All callers changed.  Also, remove related #if-0 code that was
“temporary” in the early 1990s and has not been compilable for
some time.
* src/lread.c (struct subst): New type, for substitution closure data.
(seen_list): Remove this static var, as this info is now part of
struct subst.  All uses removed.
(Flread__substitute_object_in_subtree): Rename from
Fsubstitute_object_in_subtree, and give it a 3rd arg so that it
doesn’t dump core when called from the top level with an
already-cyclic structure.  All callers changed.
(SUBSTITUTE): Remove.  All callers expanded and then simplified.
(substitute_object_recurse): Take a single argument SUBST rather
than a pair OBJECT and PLACEHOLDER, so that its address can be
passed around as part of a closure; this avoids the need for an
AUTO_CONS call.  All callers changed.  If the COMPLETED component
is t, treat every subobject as potentially circular.
(substitute_in_interval): Take a struct subst * rather than a
Lisp_Object, for the closure data.  All callers changed.
* test/src/lread-tests.el (lread-lread--substitute-object-in-subtree):
New test, to check that the core dump does not reoccur.
2017-07-09 16:05:13 -07:00
Noam Postavsky
386918f0b8 Fix lisp-comment-indent for single-semicolon case
* lisp/emacs-lisp/lisp-mode.el (lisp-comment-indent): Only check for
open paren if we're looking at multiple comment characters.
* test/lisp/emacs-lisp/lisp-mode-tests.el (lisp-comment-indent-1)
(lisp-comment-indent-2): New tests.
2017-07-06 08:59:32 -04:00
Noam Postavsky
7a0170de20 Don't put whitespace between open paren and comment in Lisp modes (Bug#19740)
* lisp/emacs-lisp/lisp-mode.el (lisp-comment-indent): If current
line's code ends in open paren, set comment indentation exactly to
column following it.
(lisp-mode-variables): Set `comment-indent-function' to
`lisp-comment-indent'.
2017-07-05 22:52:36 -04:00
Noam Postavsky
9a65b57796 * lisp/emacs-lisp/cl-print.el (cl-print-compiled-button): t by default.
* lisp/emacs-lisp/debug.el (debugger-insert-backtrace):
* lisp/help-fns.el (describe-variable): No need to let-bind
`cl-print-compiled-button' to t anymore.
2017-07-02 11:57:34 -04:00
Noam Postavsky
9a2a7bb6e6 Let test summary go through even if some logs were not generated
* lisp/emacs-lisp/ert.el (ert-summarize-tests-batch-and-exit): Check
for existence of log files before reading.
2017-07-01 23:42:30 -04:00
Stefan Monnier
6fb45b7b36 * lisp/emacs-lisp/cl-extra.el (cl--random-state): New defstruct
(cl--random-state, cl--random-time): Move from cl-lib.el.
(cl-random): Use struct accessors.
(cl-random-state-p): Remove, provided by the defstruct.
(cl-make-random-state): Rewrite to struct constructor.
2017-06-30 22:01:38 -04:00
Stefan Monnier
7618d29db3 * lisp/emacs-lisp/debug.el (debugger-list-functions): Remove obsolete msg 2017-06-30 18:01:01 -04:00
Noam Postavsky
0ae28c71c7 Hide byte code in backtraces (Bug#6991)
* lisp/emacs-lisp/debug.el (debugger-print-function): New defcustom,
defaulting to `cl-print'.
(debugger-insert-backtrace, debugger-setup-buffer): Use it instead of
`prin1'.
* etc/NEWS: Announce it.
2017-06-29 19:40:23 -04:00
Noam Postavsky
b567c48869 Don't redundantly cl-print arglist in function docstring again
* lisp/emacs-lisp/cl-print.el (cl-print-object): Don't print arglist
part of docstring.
* test/lisp/emacs-lisp/cl-print-tests.el (cl-print-tests-1): Update
test accordingly.
2017-06-29 19:40:23 -04:00
Noam Postavsky
ead545824e Improve ert backtrace recording
Change ert to use the new `backtrace-frames' function instead of
collecting frames one by one with `backtrace-frame'.  Additionally,
collect frames starting from `signal' instead the somewhat arbitrary
"6 from the bottom".  Skipping 6 frames would skip the expression that
actually caused the signal that triggered the debugger.  Possibly 6
was chosen because in the case of a failed test, the triggering frame
is an `ert-fail' call, which is not so interesting.  But in case of a
test throwing an error, this drops the `error' call which is too much.

* lisp/emacs-lisp/debug.el (debugger-make-xrefs): Remove.
* lisp/emacs-lisp/ert.el (ert--make-xrefs-region): Bring in relevant
code from `debugger-make-xrefs'.
(ert--print-backtrace): Add DO-XREFS parameter, delegate to
`debugger-insert-backtrace'.
(ert--run-test-debugger): Record the backtrace frames starting from
the instigating `signal' call.
(ert-run-tests-batch): Pass nil for `ert--print-backtrace's new
DO-XREFS parameter.
(ert-results-pop-to-backtrace-for-test-at-point): Pass t as DO-XREFS
to `ert--print-backtrace' and remove call to `debugger-make-xrefs'.
* test/lisp/emacs-lisp/ert-tests.el (ert-test-record-backtrace): Check
the backtrace list instead of comparing its string representation.
Expect `signal' to be the first frame.
2017-06-29 19:37:25 -04:00
Noam Postavsky
522e3c1585 Operate on frame list instead of printed backtrace
* lisp/emacs-lisp/debug.el (debugger-insert-backtrace): New function,
prints the given backtrace frames.
(debugger-setup-buffer): Use it instead of editing the backtrace
buffer text.
2017-06-29 19:29:10 -04:00
Paul Eggert
4314713764 Adjust lm-verify to accept current notices
Problem reported by Mike Kupfer in:
http://lists.gnu.org/archive/html/emacs-devel/2017-06/msg00512.html
* lisp/emacs-lisp/lisp-mnt.el (lm-crack-copyright):
Do not require later lines in a copyright notice to have more
indentation than earlier lines.
2017-06-24 17:57:56 -07:00
Noam Postavsky
c75eb1030f Don't change byte-compile-delete-errors at runtime (Bug#27340)
* lisp/emacs-lisp/eieio-core.el: Confine `cl-declaim' calls to compile
time.
2017-06-24 10:12:53 -04:00
Glenn Morris
65b323e14e Don't put deleted packages in the trash (bug#14967)
* lisp/emacs-lisp/package.el (package-delete):
Don't pay attention to delete-by-moving-to-trash.

; * etc/NEWS: Mention this.
2017-06-19 14:39:25 -04:00
Noam Postavsky
cc8aa484cd Fix wrong indentation after string literal (Bug#27306)
* lisp/emacs-lisp/lisp-mode.el (lisp-indent-state)
(lisp-indent-calc-next): Remove `depth' field, use (car ppss) instead.
* test/lisp/emacs-lisp/lisp-mode-tests.el
(lisp-indent-region-after-string-literal): New test.
2017-06-13 07:19:12 -04:00
Noam Postavsky
9b0f52a86e Buttonize #<bytecode> part of printed functions (Bug#25226)
* lisp/emacs-lisp/cl-print.el: Autoload `disassemble-1'.
(cl-print-compiled-button): New variable.
(help-byte-code): New button type, calls `disassemble' in its action.
(cl-print-object): Use it if `cl-print-compiled-button' is
non-nil.
2017-06-12 22:52:37 -04:00
Noam Postavsky
0648edf3e0 Split variable macro env from function env
* lisp/emacs-lisp/cl-macs.el (cl--sm-macroexpand): Remove.
(cl-symbol-macrolet): Instead of adding each binding directly into the
main environment with a special key format, put all symbol macro
bindings into a single entry in the main environment under
`:cl-symbol-macros'.
(cl--sm-macroexpand): Look up symbol bindings in the
`:cl-symbol-macros' entry of the environment.
2017-06-07 20:03:31 -04:00
Dmitry Gutov
3632633cab Enable ElDoc messages after the newline command
* lisp/emacs-lisp/eldoc.el:
Add "newline" to the eldoc-add-command-completions call (bug#27228).
2017-06-06 01:23:41 +03:00
Andy Moreton
f858c585a3 Fix check for package-unsigned-archives during retrieval
* lisp/emacs-lisp/package.el (package--download-one-archive):
Fix check for package-unsigned-archives.
2017-06-06 01:04:17 +03:00
Philipp Stephani
0dd1bbb0bb Implement field numbers in format strings
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.
2017-06-02 00:22:13 +02:00
Noam Postavsky
a415c8bccb cl-print: handle circular objects when `print-circle' is nil (Bug#27117)
* lisp/emacs-lisp/cl-print.el (cl-print--currently-printing): New variable.
(cl-print-object): When `print-circle' is nil, bind it to a list of
objects that are currently printing to avoid printing the same object
endlessly.
* test/lisp/emacs-lisp/cl-print-tests.el (cl-print-circle): New test.
2017-05-31 07:45:43 -04:00
Dmitry Gutov
e3b51b080f Extract eldoc--supported-p
* lisp/emacs-lisp/eldoc.el (eldoc--supported-p): New function.
(turn-on-eldoc-mode, eldoc-mode): Use it.
(http://lists.gnu.org/archive/html/emacs-devel/2017-05/msg00865.html)
2017-05-31 01:29:43 +03:00
Dmitry Gutov
2349f1df1b Turn global-eldoc-mode into a globalized minor mode
* lisp/emacs-lisp/eldoc.el (global-eldoc-mode):
Turn into globalized mode (bug#19853).
(turn-on-eldoc-mode): Make it into a wrapper instead of alias.
(eldoc-mode): Only show the message when called interactively.
2017-05-30 02:55:28 +03:00
Svante Carl v. Erichsen
527a7cc942 Fix cl-indent for `loop' with :keywords (Bug#15543)
* lisp/emacs-lisp/cl-indent.el (lisp-extended-loop-p): Allow for
":keywords".

Copyright-paperwork-exempt: yes
2017-05-27 16:08:35 -04:00
Philipp Stephani
ebe0bdae9d Don't attempt to recover from undefined behavior in some cases
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.
2017-05-27 15:30:19 +02:00