| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
* src/bytecode.c (exec_byte_code):
The old hack for working around spurious -Wclobbered warnings from GCC
no longer suffices; disable the warning locally.
This also makes the code slightly smaller and faster.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
GCC seems to have difficulty allocating important global interpreter
variables in registers; telling it which ones to use for 'top' and 'pc'
makes a big difference and seems to ease pressure enough for it to
deal with other variables as well.
We do it for AMD64 and ARM64. Clang doesn't seem to need these directives.
It does result in -Wclobbered warnings that seem difficult to silence.
* src/bytecode.c (BC_REG_TOP, BC_REG_PC): New.
(exec_byte_code): Use them.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
* src/bytecode.c (exec_byte_code):
Re-type op from int to ptrdiff_t, which avoids some useless conversions.
Reduce its use by using local variables for intra-block use,
and another variable (arg) where it doesn't need to be alive across
instruction dispatch. We also eliminate it where performance doesn't
matter by re-fetching it from the instruction stream.
All this should help the register allocator.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When completion-ignore-case is non-nil, if all completions share
a common prefix ignoring case, try-completion has always
returned that. Now, if all completions also share a common
prefix including case, try-completion includes that common
prefix in its return value (bug#79377).
* lisp/minibuffer.el (completion-pcm--merge-completions): Always
use return value from try-completion, which may change case.
* src/minibuf.c (Ftry_completion): Return the common prefix
which changes case.
* test/lisp/minibuffer-tests.el (completion-pcm-bug4219)
(completion-substring-test-5): New tests.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* src/w32fns.c (EMACS_TRAY_NOTIFICATION_ID_INIT): Rename from
EMACS_TRAY_NOTIFICATION_ID; all users adjusted.
(last_tray_notification_id): New static variable.
(add_tray_notification): Advance 'last_tray_notification_id' for
each new notification; wrap around to the fixed initial value when
reached the maximum. This allows Lisp programs track notifications
and remove them from the same frame from which they were created.
(Fw32_notification_notify, Fw32_notification_close): Doc fixes.
* doc/lispref/os.texi (Desktop Notifications): Update the
documentation of 'w32-notification-notify' and
'w32-notification-close'.
Bug#79400
|
| |\
| |
| |
| |
| |
| |
| |
| | |
1895ba3ba3b ; Document %i format
85db0ac0d6e ; * doc/lispref/nonascii.texi (Explicit Encoding): Fix a ...
c119a3600ed ; * doc/lispref/tips.texi (Documentation Tips): Document ...
Also fix trailing whitespace in test files.
|
| | |
| |
| |
| |
| |
| | |
* src/editfns.c (Fformat): Doc fix.
* doc/lispref/strings.texi (Formatting Strings): Document %i.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
At least on MS-Windows, the last change caused the
process-tests/fd-setsize-no-crash/make-process test to hang.
* src/process.c (wait_reading_process_output) [WINDOWSNT]: Do
not stop monitoring the process descriptor when zero bytes are
read. The EOF indication from subprocesses on MS-Windows is
detected via an error condition (see w32.c), while zero-size
reads are not to be taken as such. (Bug#79436)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When a subprocess closes its stdout/stderr pipe, that causes
pselect to always indicate that fd is readable, and read to
always return with EOF on that fd. Therefore when we receive an
EOF we need to stop monitoring the fd. Otherwise Emacs will
spin at 100% CPU, repeatedly reading that same EOF off the fd.
* src/process.c (wait_reading_process_output): When
'read_process_output' returns EOF indication, stop monitoring
the descriptor. (Bug#79436)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Previously, even passing :buffer nil to make-pipe-process would
create a buffer. Now, if you explicitly call (make-pipe-process
:buffer nil), it will create a pipe process without a buffer,
just like all the other process creation functions.
* src/process.c (Fmake_pipe_process): Check for explicit :buffer
nil and don't make a buffer. (bug#79596)
* doc/lispref/processes.texi (Asynchronous Processes): Update.
* test/src/process-tests.el
(process-test-make-pipe-process-no-buffer): Add test.
|
| | |
| |
| |
| |
| | |
Fixes bug#79581
Copyright-paperwork-exempt: yes
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
* src/w32console.c (w32con_write_glyphs)
(w32con_write_glyphs_with_face): Support UTF-8 encoded text
better, by counting characters and using display columns, not
bytes, to move the cursor after writing the text. (Bug#79298)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The buffer-local-versions of 'window-buffer-change-functions',
'window-size-change-functions',
'window-selection-change-functions' and
'window-state-change-functions' are now run with the respective
buffer temporarily current. Also, the local version of
'window-buffer-change-functions' is run for the buffer removed
from the window too.
* src/window.c (run_window_change_functions_locally)
(run_window_change_functions_globally): New functions replacing
'run_window_change_functions_1'.
(run_window_change_functions): Run the buffer local versions of
these hooks in their respective buffers. Run
'window-buffer-change-functions' for the buffer removed from the
window too.
(Vwindow_buffer_change_functions, Vwindow_size_change_functions)
(Vwindow_selection_change_functions)
(Vwindow_state_change_functions): Mention that the buffer-local
versions are run with their buffer temporarily current.
* doc/lispref/windows.texi (Window Hooks): Mention that
buffer-local-versions of window change functions are run with
their buffer temporarily current. Also say that
'window-buffer-change-functions' will be run for removed buffer
too.
* etc/NEWS: Advertise changes for the buffer-local versions of
window change functions.
|
| | |
| |
| |
| |
| |
| | |
* src/w32.c (w32_reexec_emacs): Reset undocumented bits in
STARTUPINFO flags. Suggested by yhr0x43 <yhr0x43@gmail.com>.
(Bug#79554)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In “Avoid duplicate calls to current_timespec” (2015-07-05)
we started caching current_timespec results in NOW.
However, this was buggy: we updated NOW only when the timeout was
nonzero, but the timeout can be set temporarily to zero in several
places in wait_reading_process_output (such as when checking for
process status changes), which would cause us to never update NOW
and therefore never detect that a timeout happened.
Also, this caching was wrong even in principle: since we call
Lisp code from wait_reading_process_output, substantial amounts
of time can pass, and we can be left using an outdated NOW and
incorrectly not time out. Also, nowadays we can use
monotonic_coarse_timespec which is fast, and which is better
anyway because it’s immune to manual clock changes.
Co-authored-by: Spencer Baugh <sbaugh@janestreet.com>
* src/process.c (wait_reading_process_output):
Stop caching the current realtime.
Instead, use the coarse monotonic clock without caching.
|
| | |
| |
| |
| |
| |
| |
| |
| | |
They are good enough for this purpose, and are cheaper to get.
* src/timefns.c (monotonic_coarse_timespec): New function.
* src/xterm.c [HAVE_XSYNC && !USE_GTK && HAVE_CLOCK_GETTIME]:
(x_sync_current_monotonic_time): Use it.
(CLOCK_MONOTONIC): Remove; no longer uneeded here.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* src/comp.c (ABI_VERSION): Bump new version
(comp_t): add 'eq'.
(helper_link_table): add 'slow_eq'.
(emit_slow_eq): New function.
(emit_EQ): Rework to reflect EQ implementation.
(declare_runtime_imported_funcs): Import 'slow_eq'.
(Fcomp__init_ctxt): Register emitter 'emit_eq' for op code Qeq.
This and the previous 2 commits increase elisp-benchmarks performance by
3.6% on my test machine. Also a (small) reduction in eln size comes with
it.
|
| | |
| |
| |
| | |
* src/lisp.h (EQ): Make use '__builtin_expect'.
|
| | |
| |
| |
| |
| | |
* src/data.c (slow_eq): New function.
* src/lisp.h (EQ): Call it.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
* doc/lispref/processes.texi (Accepting Output):
* src/process.c (Faccept_process_output): Document better the
meaning of the timeout of 'accept-process-output' a,d the fact
that it doesn't always return as soon as some output is available.
See https://lists.gnu.org/archive/html/emacs-devel/2025-08/msg00750.html
for more details.
|
| | |
| |
| |
| |
| |
| | |
* src/android.c (android_set_dashes): Always release local
reference to dash array even when it was returned by
GetObjectField.
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| | |
This value forces a quit check at the next backward branch, to avoid
rare situations being hard to interrupt.
Suggested by Pip Cet.
|
| | |
| |
| |
| |
| |
| | |
* src/bytecode.c (exec_byte_code): Reset quitcounter to 1 after longjmp;
the exact value isn't important. This may reduce register pressure a
tiny bit or at least remove a useless stack slot.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This rids us of a bunch of unhygienic macros with free variables and
makes the marking code actually readable again. Even better, it is all
processed by the compiler even when the checks are disabled.
* src/alloc.c (CHECK_ALLOCATED, CHECK_LIVE, CHECK_ALLOCATED_AND_LIVE)
(CHECK_ALLOCATED_AND_LIVE_SYMBOL): Transform macros into...
(check_live, check_allocated_and_live, check_allocated_and_live_symbol)
(check_allocated_and_live_vectorlike): ...functions. Callers adapted.
|
| | | |
|
| |\ \
| |/
| |
| |
| |
| | |
47454566772 ; * lisp/dired-x.el (dired-find-subdir): Doc fix (bug#794...
0832e5fec56 ; * lisp/vc/vc.el (vc-print-root-log): Improve docstring ...
2fafcdbf6ac ; Minor copyedits in src/editfns.c
|
| | |
| |
| |
| |
| |
| | |
* src/editfns.c (Fbuffer_string, Freplace_buffer_contents)
(styled_format): Avoid using non-ASCII characters in doc strings
and comments.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Reloading a byte-compiled file when we fail to fetch some
docstring in it is not guaranteed to work and can cause
subtle bugs which are worse than simply not having a
docstring. Add 'documentation-dynamic-reload' variable to
allow disabling this behavior. See the discussion in
https://lists.gnu.org/archive/html/emacs-devel/2025-08/msg00304.html
for more details.
* src/doc.c (syms_of_doc): Add 'documentation-dynamic-reload'.
(Fdocumentation, Fdocumentation_property): Check value of
'documentation-dynamic-reload'.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Correct a few edge cases where we used the keymaps at point when
looking up keymaps for an event position which is outside the
current buffer. Namely:
- Clicking on a part of the mode line which is after the end of
mode-line-format produces an event with non-nil posn-area but
nil posn-string.
- Even if posn-string doesn't have a local keymap, we should
still ignore the keymaps at point if posn-string is non-nil.
* src/keymap.c (Fcurrent_active_maps): Ignore keymaps at point
for more positions outside the buffer. (bug#76620)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* lisp/emacs-lisp/shorthands.el (hack-read-symbol-shorthands):
Avoid inf-loops during bootstrap.
E.g. this can occur while loading `uni-special-lowercase.el` where
`hack-local-variables--find-variables` uses `downcase` which triggers
loading `uni-special-lowercase.el`, ...
* lisp/international/mule-cmds.el (ucs-names): Explicitly require
`charprop`.
* src/Makefile.in ($(lispsource)/loaddefs.el): Depend on `charprop`.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The doc strings for re-search-forward and re-search-backward have been
improved (bug#25193, bug#31584) but the corresponding posix- and
non-regexp search functions still have the original text, despite
describing the exact same mechanism.
There is no reason for them to differ, so we make them all use the
updated version which also is more readable. Any future doc string
improvements should be made to all of them in the same way for
consistency.
* src/search.c (Fsearch_backward, Fsearch_forward)
(Fposix_search_backward, Fposix_search_forward):
Use text from Fre_search_forward and Fre_search_backward.
|
| | | |
|
| | |
| |
| |
| |
| | |
* src/process.c (deactivate_process): Clear the callback info of
descriptors we are closing. (Bug#79367)
|
| | |
| |
| |
| |
| | |
* src/xdisp.c (redisplay_internal): Don't increment `redisplay_counter`
if we ail out before starting an actual redisplay.
|
| | |
| |
| |
| |
| |
| | |
* src/process.c (server_accept_connection): Make the client
process be locked to the same thread as the parent server process,
or unlocked if the server process was unlocked. (Bug#79367)
|
| | |
| |
| |
| |
| | |
* src/xterm.c (xi_disable_devices): Move `out' label into the
outermost loop. (bug#79343)
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
* src/indent.c (vertical-motion): If iterator is inside an overlay,
reset it to the beginning of line before trying to reach goal
column. This prevents point from being stuck at the beginning
of overlay strings during upward motions.
Copyright-paperwork-exempt: yes
|
| | |
| |
| |
| |
| | |
* src/process.c (clear_fd_callback_data, delete_write_fd,
delete_keyboard_wait_descriptor): Space before paren.
|
| | |
| |
| |
| |
| |
| |
| | |
* src/xdisp.c (next_element_from_display_vector): Only switch the
iterator from unibyte to multibyte, never in the other direction,
and not if the original character came from a unibyte buffer.
(Bug#79317)
|
| | |
| |
| |
| |
| |
| | |
* src/xdisp.c (next_element_from_display_vector): Fix handling
non-ASCII characters in display-table cells corresponding to
ASCII characters. (Bug#79311)
|
| | |
| |
| |
| |
| | |
* src/xdisp.c (push_it): Don't rest the string_from_prefix_prop_p
flag. (Bug#79304)
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The following changes make the changes for bug#79275 less
radical, closer to their previous shape, while still fixing
that bug.
* src/xdisp.c (push_prefix_prop, get_it_property): Restore
original code that determined the object and position on it.
(get_line_prefix_it_property): Take FROM_BUFFER from the actual
object of the prefix property.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Only allow string mutation that is certain not to require string data to
be resized and reallocated: writing bytes into a unibyte string, and
changing ASCII to ASCII in a multibyte string.
This ensures that mutation will never transform a unibyte string to
multibyte, that the size of a string in bytes never changes, and that
the byte offsets of characters remain the same. Most importantly, it
removes a long-standing obstacle to reform of string representation and
allow for future performance improvements.
* src/data.c (Faset): Disallow resizing string mutation.
* src/fns.c (clear_string_char_byte_cache):
* src/alloc.c (resize_string_data): Remove.
* test/src/data-tests.el (data-aset-string): New test.
* test/lisp/subr-tests.el (subr--subst-char-in-string):
Skip error cases.
* test/src/alloc-tests.el (aset-nbytes-change):
Remove test that is no longer relevant.
* doc/lispref/strings.texi (Modifying Strings):
* doc/lispref/sequences.texi (Array Functions):
* doc/lispref/text.texi (Substitution): Update manual.
* etc/NEWS: Announce.
|