* src/igc.h (igc_xalloc_raw_exact): Add label parameter.
* src/igc.c (igc_xalloc_raw_exact): Add label parameter and pass it
* src/image.c (make_image_cache): [MPS] Use __func__ as label.
* src/itree.c (itree_stack_create): [MPS] Use __func__ as label.
* src/xfaces.c (make_face_cache): [MPS] Use __func__ as label.
* src/igc-types.h (union igc_header): Use uint32_t instead for size_t.
Apparently needed for Mingw64; with size_t the header grows to 16 bytes.
* src/igc.c: Move static assert to igc-types.h.
* src/xterm.c [!USE_GTK] (x_update_frame_user_time_window): When
replacing _NET_WM_USER_TIME with a new _NET_WM_USER_TIME_WINDOW and
the frame has requested no-focus-on-map, ensure _NET_WM_USER_TIME is
zero also on the new _NET_WM_USER_TIME_WINDOW.
(x_make_frame_visible) [!USE_GTK]: Don't overwrite _NET_WM_USER_TIME
before mapping a frame that has requested no-focus-on-map, and whose
_NET_WM_USER_TIME should thus remain zero (bug#80525).
* lisp/tab-bar.el (find-file-read-only-other-tab): Pass the
function 'find-file-other-tab' directly to
'find-file--read-only' (Bug#80630).
Copyright-paperwork-exempt: yes
* lisp/dabbrev.el (dabbrev-capf): Return an empty table rather than
signaling an error when there are no completions.
The completion UI already takes care of emitting a message like
"No match".
The fields of the new struct are what the global variables
charset_table, charset_table_size, charset_table_used, and
charset_attributes_table used to be. The struct should make it clearer
that those fields must be kept in sync.
* src/charset.h (struct charset_table): New struct.
(charset_attributes_getter): Adjust accordingly.
* src/charset.c (charset_table): Change type to struct charset_table.
(charset_table_size, charset_table_used, charset_attributes_table):
Moved to the struct.
(Fdefine_charset_internal, Ffind_charset_region, Ffind_charset_string)
(shrink_charset_table, syms_of_charset): Adjust to struct charset_table.
* src/pdumper.c (dump_charset, dump_charset_table): Adjust to struct
charset_table.
Determining the best size for a static array seems difficult; so
allocate it dynamically.
* src/charset.c (CHARSET_TABLE_INIT_SIZE): New constant.
(syms_of_charset): Malloc charset_table here.
(charset_table_init): Removed.
(shrink_charset_table): New function.
(Fclear_charset_maps): Call it.
* src/charset.h (charset_table_init): Removed.
(charset_attributes_getter): Add an assertion.
* src/pdumper.c (dump_charset_table): Assert that charset_table_size ==
charset_table_used.
This simplifies the GC code, as this was the only field in the charset
struct that referenced the GC heap. Without it, we no longer need to
trace the charset_table.
* src/charset.h (struct charset.attributes): Removed.
(charset_attributes_getter): New helper.
(CHARSET_ATTRIBUTES): Use it.
* src/charset.c (charset_attributes_table): New.
(Fdefine_charset_internal): Place attrs in charset_attributes_table.
(syms_of_charset): Initialize charset_attributes_table.
(mark_charset): Deleted.
* src/pdumper.c (dump_charset): Skip attributes field.
* src/lisp.h (mark_charset): Deleted.
* src/alloc.c (garbage_collect): mark_charset no longer needed.
This option checks xmalloc'd memory for words that look
like (untraced) MPS pointers. It is very slow and leaks memory, but
was good enough to find some untraced pointers.
* configure.ac (IGC_DEBUG_ALLOC): New option.
* src/alloc.c (xmalloc):
(xzalloc):
(xrealloc): Call 'register_xmalloc_allocation'.
(xfree): Call 'unregister_xmalloc_allocation'.
e* src/lisp.h (register_xmalloc_allocation)
(unregister_xmalloc_allocation): New.
* src/igc.c (root_find_containing): New.
(igc_destroy_root_with_start): Call 'protect_xmalloc_allocation'.
(scan_xmalloc_allocations):
(unregister_xmalloc_allocation):
(register_xmalloc_allocation):
(protect_xmalloc_allocation):
(staticvec_contains):
(check_pointer):
(igc_scan_for_untraced_objects): New.
Eliminate 'vtable--limit-string' in favor of the more efficient
'truncate-string-pixelwise'. Remove extraneous pre-measurement
calls to 'string-pixel-width' and ellipsis concatenation as
'truncate-string-pixelwise' does both.
The 'make-vtable' 'ellipsis' keyword can be a string to override
the default returned by 'truncate-string-ellipsis'.
* lisp/emacs-lisp/vtable.el (vtable--ellipsis): New defun.
(vtable-insert-object, vtable--insert): Use 'vtable--ellipsis'.
(vtable--insert-line, vtable--insert-header-line): Call
'truncate-string-pixelwise' instead of 'vtable--limit-string'.
(vtable--limit-string): Remove function.
* test/lisp/emacs-lisp/vtable-tests.el
(test-vtable--limit-string-with-face-remapped-buffer): Remove
test, obsoleted by misc-test-truncate-string-pixelwise.
* doc/misc/vtable.texi: Document that :ellipsis can be a string.
* lisp/files.el (find-sibling-file-search): Following expansion
of each EXPANSION, advance the search start position to reflect
the actual length of the expanded text (the updated string), not
the length of the "\\([&0-9]+\\)" (the string before expansion).
(Bug#80636)
Copyright-paperwork-exempt: yes
This provides limited support for window-specific overlay properties.
To complete it, we still need to add support for it to
`next/previous-single-char-property-change`.
* lisp/emacs-lisp/cursor-sensor.el (cursor-sensor--intangible-p):
Add `window` argument.
(cursor-sensor-tangible-pos, cursor-sensor--detect):
Pass `window` argument to the functions
looking for overlay properties.
On some profiles (after disabling syntax and refined
fontification), this was taking >90% of the time to fontify a buffer.
* lisp/vc/diff-mode.el (diff--git-preamble-overlay)
(diff--git-footer-overlay): New variables.
(diff--git-preamble-end, diff--git-footer-start): Use them to cache
the result.
* src/itree.c (itree_stack_create) [MPS]: Use 'igc_xalloc_raw_exact'.
(itree_stack_destroy) [MPS]: Use 'igc_xfree'.
(itree_stack_ensure_space) [MPS]: Use 'igc_xpalloc_raw_exact'.