Commit graph

42709 commits

Author SHA1 Message Date
Lars Ingebrigtsen
b8dbb2bb73 Clarify the default-boundp doc string
* src/data.c (Fdefault_boundp): Doc string clarification (bug#44141).
2020-12-09 14:52:53 +01:00
Mattias Engdegård
be4d6b043f Fix [:upper:] and [:lower:] for Unicode characters (bug#11309)
* src/regex-emacs.c (execute_charset): Add canon_table argument to
allow expression of a correct predicate for [:upper:] and [:lower:].
(mutually_exclusive_p, re_match_2_internal): Pass extra argument.
* test/src/regex-emacs-tests.el (regexp-case-fold, regexp-eszett):
New tests.  Parts of regexp-eszett still fail and are commented out.
2020-12-09 10:35:13 +01:00
Lars Ingebrigtsen
85acde2ab5 Make uncache_image slightly more efficient
* src/image.c (uncache_image): Extremely minor speed-up: Only
compute the hash once.
2020-12-09 01:10:04 +01:00
Stefan Monnier
02ec247fcc * src/fns.c: Remove left over include 2020-12-08 18:54:52 -05:00
Lars Ingebrigtsen
ac341cd629 Restore Emacs 27 image cache semantics
* src/image.c (equal_lists): Remove.
(search_image_cache): Use Fequal instead of equal_lists.
Benchmarking shows no measurable time difference, and this
restores the cache semantics from Emacs 27 (where file names
didn't have to be EQ for the cache to be used).
2020-12-09 00:42:11 +01:00
Stefan Monnier
be0f2de179 * src/fns.c (hash_string): Speed up on large strings 2020-12-08 18:08:54 -05:00
Eli Zaretskii
26b198cef9 Improve documentation of 'backtrace-on-error-noninteractive'
* src/eval.c (syms_of_eval) <backtrace-on-error-noninteractive>:
Format the doc string according to conventions.

* etc/NEWS: Improve formatting and wording of the entry describing
'backtrace-on-error-noninteractive.
2020-12-08 18:43:09 +02:00
Lars Ingebrigtsen
8b1693f689 Make previous Fkill_emacs change safer
* src/emacs.c (Fkill_emacs): Don't run `kill-emacs-hook' if it's nil.
2020-12-07 17:26:53 +01:00
Lars Ingebrigtsen
b218c8b6b5 Allow shutting down Emacs even if there are errors in kill-emacs-hook
* lisp/subr.el (run-hook-query-error-with-timeout): New function
(bug#28542).

* src/emacs.c (Fkill_emacs): Use it to allow exiting Emacs even if
there are errors in kill-emacs-hook.
(syms_of_emacs): Define the symbol.
2020-12-07 15:40:23 +01:00
Philipp Stephani
3970f4ac40 Add new variable to selectively suppress backtraces in batch mode.
* src/eval.c (syms_of_eval): Define new variable
'backtrace-on-error-noninteractive' to selectively enable backtrace
printing in batch mode.
(signal_or_quit): Use it.

* etc/NEWS: Document new variable.

* test/src/eval-tests.el (eval-tests/backtrace-in-batch-mode/inhibit):
New unit test.
2020-12-07 11:59:06 +01:00
Philipp Stephani
40e11743ca Print a backtrace on unhandled errors in batch mode (Bug#44942).
* src/eval.c (signal_or_quit): Print a backtrace in batch mode if no
error handler was found.

* test/src/eval-tests.el (eval-tests/backtrace-in-batch-mode)
(eval-tests/backtrace-in-batch-mode/demoted-errors): New unit tests.

* etc/NEWS: Document change.
2020-12-06 17:47:52 +01:00
Spencer Baugh
39915c7084 * src/alloc.c (Fgarbage_collect_maybe): New function 2020-12-04 17:21:02 -05:00
Mattias Engdegård
7bdc40e8d1 Speed up match-substitute-replacement
* lisp/subr.el (match-substitute-replacement): Use match-data--translate.
* src/search.c (Fmatch_data__translate): Remove string restriction.
* test/lisp/subr-tests.el (subr-match-substitute-replacement): New test.
2020-12-04 18:39:13 +01:00
Eli Zaretskii
190a685370 Don't abort when terminated by SIGINT in -batch
* src/xdisp.c (clear_message_stack): New function.
* src/emacs.c (terminate_due_to_signal): Call clear_message_stack
when we are being shut down by SIGINT under -batch.
* src/lisp.h (clear_message_stack): Add prototype.
2020-12-04 16:47:49 +02:00
Glenn Morris
45f0fef718 Merge from origin/emacs-27
749e4b7e0b Reset xref-show-xrefs-function temporarily
3e6525d69f Don't show in 'view-lossage' responses to xterm feature qu...
9fbff9c35c ; * src/buffer.c: Fix comment describing 'buffer_defaults'.
2020-12-01 07:50:12 -08:00
Eli Zaretskii
9fbff9c35c ; * src/buffer.c: Fix comment describing 'buffer_defaults'. 2020-11-30 20:42:06 +02:00
Philipp Stephani
41c338474d Fix double-free bug when finalizing module runtimes.
* src/emacs-module.c (finalize_runtime_unwind): Don't finalize initial
environment twice.

* test/src/emacs-module-resources/mod-test.c (emacs_module_init):
Allocate lots of values during module initialization to trigger the
bug.
2020-11-29 21:13:02 +01:00
Alan Third
a91ca6560c Allow doprint to handle multibyte chars in format (bug#44349)
* src/doprnt.c (doprnt): Handle the case where fmtchar is the start of
a multibyte character.
2020-11-29 17:33:34 +00:00
Lars Ingebrigtsen
bb0e6fb886 frame-position doc string clarificaton
* src/frame.c (Fframe_position): Mention that the values are
system-dependent (bug#32977).
2020-11-29 11:10:42 +01:00
Lars Ingebrigtsen
70c8ed55fd garbage-collect doc string clarification
* src/alloc.c (Fgarbage_collect): Mention that calling this
function is not guaranteed to collect all the garbage (bug#34404).
2020-11-29 11:05:10 +01:00
Eli Zaretskii
f31cacd1ff Revert "Fix incorrect handling of module runtime and environment pointers."
This reverts commit cdc632fbe6.
Those changes are too significant and non-trivial to be
suitable for a release branch at this time.
2020-11-28 09:21:33 +02:00
Philipp Stephani
cdc632fbe6 Fix incorrect handling of module runtime and environment pointers.
We used to store module runtime and environment pointers in the static
lists Vmodule_runtimes and Vmodule_environments.  However, this is
incorrect because these objects have to be kept per-thread.  With this
naive approach, interleaving module function calls in separate threads
leads to environments being removed in the wrong order, which in turn
can cause local module values to be incorrectly garbage-collected.

Instead, turn Vmodule_runtimes and Vmodule_environments into
hashtables keyed by the thread objects.  The fix is relatively
localized and should therefore be safe enough for the release branch.

Module assertions now have to walk the pointer list for the current
thread, which is more correct since they now only find environments
for the current thread.

Also add a unit test that exemplifies the problem.  It interleaves two
module calls in two threads so that the first call ends while the
second one is still active.  Without this change, this test triggers
an assertion failure.

* src/emacs-module.c (Fmodule_load, initialize_environment)
(finalize_environment, finalize_runtime_unwind): Store runtime and
environment pointers in per-thread lists.
(syms_of_module): Initialize runtimes and environments hashtables.
(module_assert_runtime, module_assert_env, value_to_lisp): Consider
only objects for the current thread.
(module_gc_hash_table_size, module_hash_push, module_hash_pop): New
generic hashtable helper functions.
(module_objects, module_push_pointer, module_pop_pointer): New helper
functions to main thread-specific lists of runtime and environment
pointers.
(mark_modules): Mark all environments in all threads.

* test/data/emacs-module/mod-test.c (Fmod_test_funcall): New test
function.
(emacs_module_init): Bind it.

* test/src/emacs-module-tests.el (emacs-module-tests--variable): New
helper type to guard access to state in a thread-safe way.
(emacs-module-tests--wait-for-variable)
(emacs-module-tests--change-variable): New helper functions.
(emacs-module-tests/interleaved-threads): New unit test.
2020-11-27 21:44:05 +01:00
Mattias Engdegård
a7825c4be0 Use correct glyph in title when resizing NS frames
* src/nsterm.m ([EmacsView windowWillResize:toSize:]): Use ×, not x.
2020-11-27 21:17:58 +01:00
Philipp Stephani
23974cfa48 Fix incorrect handling of module runtime and environment pointers.
We used to store module runtime and environment pointers in the static
lists Vmodule_runtimes and Vmodule_environments.  However, this is
incorrect because these objects have to be kept per-thread.  With this
naive approach, interleaving module function calls in separate threads
leads to environments being removed in the wrong order, which in turn
can cause local module values to be incorrectly garbage-collected.
The fix isn't completely trivial: specbinding the lists wouldn't work
either, because then the garbage collector wouldn't find the
environments in other threads than the current ones, again leading to
objects being garbage-collected incorrectly.  While introducing custom
pseudovector types would fix this, it's simpler to put the runtime and
environment pointers into the specbinding list as new specbinding
kinds.  This works since we need to unwind them anyway, and we only
ever treat the lists as a stack.  The thread switching machinery
ensures that the specbinding lists are thread-local, and that all
elements of the specbinding lists in all threads are marked during
garbage collection.

Module assertions now have to walk the specbinding list for the
current thread, which is more correct since they now only find
environments for the current thread.  As a result, we can now remove
the faulty Vmodule_runtimes and Vmodule_environments variables
entirely.

Also add a unit test that exemplifies the problem.  It interleaves two
module calls in two threads so that the first call ends while the
second one is still active.  Without this change, this test triggers
an assertion failure.

* src/lisp.h (enum specbind_tag): Add new tags for module runtimes and
environments.

* src/eval.c (record_unwind_protect_module): New function to record a
module object in the specpdl list.
(do_one_unbind): Unwind module objects.
(backtrace_eval_unrewind, default_toplevel_binding, lexbound_p)
(Fbacktrace__locals): Deal with new specbinding types.
(mark_specpdl): Mark module environments as needed.

* src/alloc.c (garbage_collect): Remove call to 'mark-modules'.
Garbage collection of module values is now handled as part of marking
the specpdl of each thread.

* src/emacs-module.c (Fmodule_load, funcall_module): Use specpdl to
record module runtimes and environments.
(module_assert_runtime, module_assert_env, value_to_lisp): Walk
through specpdl list instead of list variables.
(mark_module_environment): Rename from 'mark_modules'.  Don't attempt
to walk though current thread's environments only, since that would
miss other threads.
(initialize_environment, finalize_environment): Don't change
Vmodule_environments variable; environments are now in the specpdl
list.
(finalize_environment_unwind, finalize_runtime_unwind): Make 'extern'
since do_one_unbind now calls them.
(finalize_runtime_unwind): Don't change Vmodule_runtimes variable;
runtimes are now in the specpdl list.
(syms_of_module): Remove Vmodule_runtimes and Vmodule_environments.

* test/data/emacs-module/mod-test.c (Fmod_test_funcall): New test
function.
(emacs_module_init): Bind it.

* test/src/emacs-module-tests.el (emacs-module-tests--variable): New
helper type to guard access to state in a thread-safe way.
(emacs-module-tests--wait-for-variable)
(emacs-module-tests--change-variable): New helper functions.
(emacs-module-tests/interleaved-threads): New unit test.
2020-11-27 20:15:33 +01:00
Philipp Stephani
e742368920 ; * src/lisp.h (enum specbind_tag): Fix typo. 2020-11-27 20:04:20 +01:00
Mattias Engdegård
558b6dbca7 Fix replace-regexp-in-string substring match data translation
For certain patterns, re-matching the same regexp on the matched
substring does not produce correctly translated match data
(bug#15107 and bug#44861).

Using a new builtin function also improves performance since the
number of calls to string-match is halved.

Reported by Kevin Ryde and Shigeru Fukaya.

* lisp/subr.el (replace-regexp-in-string): Translate the match data
using match-data--translate instead of trusting a call to string-match
on the matched string to do the job.
* test/lisp/subr-tests.el (subr-replace-regexp-in-string):
Add test cases.
* src/search.c (Fmatch_data__translate): New internal function.
(syms_of_search): Register it as a subroutine.
2020-11-26 14:20:13 +01:00
Stefan Monnier
1eb168fa97 (defvar): Detect defining a variable currently lexically bound
* src/eval.c (lexbound_p): New function.
(Finternal__define_uninitialized_variable): Use it.
2020-11-25 14:49:55 -05:00
Michael Albinus
e45ad6b08e Merge from origin/emacs-27
6442cdc0e4 Revert extra focus redirection in do_switch_frame (Bug#24803)
fc4379f1ae Minor cleanup of tramp-tests.el on MS Windows
dea3d6aa18 Fix handling of defcustom :local tag
2020-11-25 12:18:23 +01:00
Michael Albinus
ba004ac7dd Merge from origin/emacs-27
f425a774c2 Fix display artifacts when 'display' properties cover newl...
2020-11-25 11:49:54 +01:00
Martin Rudalics
6442cdc0e4 Revert extra focus redirection in do_switch_frame (Bug#24803)
* src/frame.c (do_switch_frame): Do not also redirect frame
focus when FRAME has its minibuffer window on the selected
frame which was intended to fix Bug#24500.  It may cause
Bug#24803 and lead to a nasty state where no active cursor is
shown on any frame, see
https://lists.gnu.org/archive/html/emacs-devel/2020-11/msg01137.html.
2020-11-25 09:58:21 +01:00
Eli Zaretskii
f425a774c2 Fix display artifacts when 'display' properties cover newlines
* src/xdisp.c (pos_visible_p): Set glyph_row of scratch iterators
to NULL, to avoid producing glyphs while we figure out the layout.
(Bug#44826)
2020-11-24 17:04:37 +02:00
Itai Seggev
868f51324a Codesign the executable on recene MacOS systems
* src/Makefile.in (temacs$(EXEEXT)): Codesign the executable on
recent (ARM) MacOS systems (bug#43878).  Without this, building
Emacs fails.

Copyright-paperwork-exempt: yes
2020-11-24 06:52:27 +01:00
Glenn Morris
be17ee78c6 Merge from origin/emacs-27
86cbc9d216 Make ignoring modifiers on IME input optional
32b97bb9e0 Ignore modifiers when processing WM_IME_CHAR messages
f641ef1a07 Improve documentation of 'font-spec'

# Conflicts:
#	etc/NEWS
2020-11-23 09:41:53 -08:00
Alan Mackenzie
c3edaa5524 minibuffer code: restore original frame after using minibuffer-only frame, etc
* src/minibuf.c (read_minibuf): In the record_unwind_protect for the second
restore_window_configuration (separate minibuffer frame case) arrange for the
future switching back to the original frame by Fset_window_configuration.
2020-11-23 15:54:50 +00:00
Philipp Stephani
edd949a3eb Unbreak compilation with CHECK_STRUCTS.
Commit 3963aea4f4 modified the ‘buffer’
structure, but didn’t adapt the hash.

* src/pdumper.c (dump_buffer): Update buffer hash.
2020-11-22 23:22:50 +01:00
Stefan Kangas
fb9326b45c Say which command shadows a key binding
* src/keymap.c (describe_vector): Say which command shadows this
binding.  (Bug#9293)
* test/src/keymap-tests.el
(help--describe-vector/bug-9293-one-shadowed-in-range): Adapt
test.
2020-11-22 02:48:53 +01:00
Stefan Kangas
84dd5c9bea Don't shadow bindings by the same command
* src/keymap.c (describe_vector): Do not say binding is shadowed if
the other key binding points to the same command.  (Bug#9293)
* test/src/keymap-tests.el
(help--describe-vector/bug-9293-same-command-does-not-shadow): New
test.
2020-11-22 02:45:03 +01:00
Stefan Kangas
a649034336 Don't show key ranges if shadowed by different commands
* src/keymap.c (describe_vector): Make sure found consecutive keys
are either not shadowed or, if they are, that they are shadowed by
the same command.  (Bug#9293)
* test/src/keymap-tests.el
(help--describe-vector/bug-9293-one-shadowed-in-range): New test.
2020-11-22 02:45:03 +01:00
Jared Finder
2c7687738d Migrate usage of GPM_CLICK_EVENT to MOUSE_CLICK_EVENT.
* src/termhooks.h (enum event_kind):
* src/term.c (term_mouse_click, handle_one_term_event):
* src/keyboard.c (discard_mouse_events, make_lispy_event): Migrate
usage of GPM_CLICK_EVENT to MOUSE_CLICK_EVENT.
2020-11-21 10:20:05 +02:00
Eli Zaretskii
86cbc9d216 Make ignoring modifiers on IME input optional
By default, ignore modifier keys on IME input, but add
a variable to get back old behavior.
* src/w32fns.c (syms_of_w32fns): New variable
w32-ignore-modifiers-on-IME-input.
(w32_wnd_proc): Use it to ignore modifier keys when IME input is
used.  (Bug#44641)

* etc/NEWS: Announce the change and the new variable.
2020-11-21 10:14:55 +02:00
Masahiro Nakamura
32b97bb9e0 Ignore modifiers when processing WM_IME_CHAR messages
* src/w32fns.c (w32_wnd_proc): Ignore modifiers when processing
WM_IME_CHAR messages.
2020-11-21 09:50:22 +02:00
Eli Zaretskii
88adf1f0dd Fix compilation on MS-Windows with librsvg > 2.46.0
* src/image.c (rsvg_handle_get_dimensions, init_svg_functions):
Make 'rsvg_handle_get_dimensions' available and defined for all
versions of librsvg.  (Bug#44655)
2020-11-20 17:00:36 +02:00
Lars Ingebrigtsen
bc951000b3 Avoid a compilation warning about an ambiguous else
* src/data.c (set_internal): Avoid compilation warning.

data.c:1443:9: error: suggest explicit braces to avoid ambiguous ‘else’
 1443 |      if (idx > 0 && bindflag == SET_INTERNAL_SET
      |         ^
2020-11-20 00:19:18 +01:00
Stefan Monnier
8fac244464 * src/data.c (set_internal): Fix bug#44733
Set the default value when `set` encounters a PER_BUFFER variable
which has been let-bound globally, to match the behavior seen with
`make-variable-buffer-local`.

* test/src/data-tests.el (binding-test--let-buffer-local):
Add corresponding test.
(data-tests--set-default-per-buffer): Add tentative test for the
performance problem encountered in bug#41029.
2020-11-19 17:13:04 -05:00
Eli Zaretskii
f641ef1a07 Improve documentation of 'font-spec'
* doc/lispref/display.texi (Low-Level Font):
* src/font.c (Ffont_spec): Document 'font-spec' keys that are
supported, but were undocumented.
2020-11-19 22:06:23 +02:00
Stefan Monnier
3963aea4f4 * src/buffer.h (struct buffer): Remove unused field minor_modes
* src/buffer.c (bset_minor_modes): Remove function.
(reset_buffer_local_variables, init_buffer_once): Don't set `minor_modes`.
2020-11-19 13:10:40 -05:00
Mattias Engdegård
90aab73f8d More string-search optimisations
All-ASCII strings cannot have substrings with non-ASCII characters in
them; use this fact to avoid searching entirely.

* src/fns.c (Fstring_search): For multibyte non-ASCII needle and
unibyte haystack, don't check if the haystack is all-ASCII; it's a
waste of time. For multibyte non-ASCII needle and multibyte
all-ASCII haystack, fail immediately.
* test/src/fns-tests.el (string-search): Add more test cases.
2020-11-19 14:58:48 +01:00
Alan Mackenzie
6e469709c5 In attempted recursive minibuffer use, display error message in correct frame
This was problematic when minibuffer-follows-selected-frame was non-nil.
Introduce a new parameter DONT-SET-FRAME to set-window-configuration.

* doc/lispref/windows.texi (Window Configurations): Describe the new &optional
parameter to set-window-configuration.

* etc/NEWS (Lisp Changes): Note the new parameter to set-window-configuration.

* src/keyboard.c (read_char_help_form_unwind): Add a new Qnil argument to the
call of Fset_window_configuration.

* src/minibuf.c (read_minibuf): Cons up a Qt with the window configuration in
the argument to record_unwind_protect for the window configuration (twice).

* src/window.c (Fset_window_configuration): Add the new &optional parameter
and document it in the doc string.  At the final do_switch_frame operation,
restore the original frame when DONT-SET-FRAME is non-nil.
(restore_window_configuration): Handle the new parameter when the supplied
argument is a cons.
2020-11-19 10:31:50 +00:00
Alan Third
ca8e37eaf6 Fix SVG display again (bug#44655)
* src/image.c (svg_load_image): Fall back to
rsvg_handle_get_dimensions if we can't calculate the size of the
image.
2020-11-18 23:07:57 +00:00
Glenn Morris
a280a6d7ca Merge from origin/emacs-27
19da602991 Fix input method translation near read-only text
5aabf2cc7f Fix display of truncated R2L lines on TTY frames
daff3bda10 Avoid crashes when a reversed glyph row starts with a comp...
b697bb91a1 ; * .gitignore: src/fingerprint.c not generated since 2019...
2020-11-16 08:59:47 -08:00