This replaces the AMS pool with an AMC pool + pinning.
* src/igc.c (struct igc_pins): New.
(struct igc): Add member pins.
(pin, unpin, amke_pins, count_pins, enlarge_pins): New
functions.
(make_fake_entry_pins): New function.
(Figc_info): Use make_fake_entry_pins.
(igc_thread_remove): Unpin thread_state.
(igc_alloc_global_ref): Pin allocated global ref.
(igc_free_global_ref): New function.
(make_pool_ams): Remove.
(make_igc): Make immovable pool and AMC pool.
* src/igc.h (igc_free_global_ref): Declare.
* src/emacs-module.c (module_free_global_ref): Call
igc_free_global_ref.
* src/lisp.h (struct thread_state): Add member pin_index.
* src/thread.h (GCALIGNED_STRUCT): Add member pin_index.
* src/igc.c
Mostly boilerplate code to override the SegAccess method of AWLSeg.
* mps/code/poolawl.c (AWL0Pool, AWL0Seg): New classes.
(awl0SegAccess, awl0BufferFill): New methods.
On MacOS/x86_64, sizeof (sys_jmp_buf) == 148. We can't create a root
for this size because MPS requires word aligned sizes.
* src/thread.c (main_thread_getcjmp): Use GCALIGNED_STRUCT attribute.
* src/igc.c (root_create_main_thread): Round the size of the jumpbuf up
to GCALIGNMENT.
The closure argument is only needed for mps_pool_walk. Without it,
dflt_scan_obj can be a bit simpler and faster.
* src/igc.c (dflt_scan_obj): Remove the closure argument.
(dflt_scanx): Call collect_stats here.
(dflt_scan): Expand the loop here and drop the NULL argument.
*src/igc.c (Figc__describe_arena) [!HAVE_OPEN_MEMSTREAM]:
Implementation for platforms that don't have 'open_memstream'.
(syms_of_igc): Always defsubr 'Sigc__describe_arena'.
Should not be needed as we have igc--set-pause-time and
igc--set-commit-limit functions.
* src/igc.c (read_pause_time, read_commit_limit): Deleted.
(make_arena): Use hard-coded defaults.
* src/igc.c (Figc__describe_arena): New wrapper for ArenaDescribe.
(syms_of_igc): Register it.
* lisp/emacs-lisp/igc.el (igc-describe-arena): New command.
* lisp/vc/log-view.el (log-view-copy-revision-as-kill): Signal
user-error if there is no revision at point.
* doc/emacs/maintaining.texi (VC Change Log):
* etc/NEWS: Shorten docs for the new command.
* lisp/progmodes/hideshow.el (hs-hideable-region-p): New
function.
(hs--make-indicators-overlays, hs--add-indicators)
(hs-hide-block-at-point, hs-hide-all, hs-hide-block)
(hs-hide-initial-comment-block): Use it. (Bug#79533)
* lisp/editorconfig.el (editorconfig-indentation-alist): Remove entries
of the form `(MODE-mode MODE-basic-offset)`, `(MODE-mode
MODE-indent-level)`, or `(MODE-mode MODE-indent-offset)` since they are
covered by the fallback guessing code.
(editorconfig--default-indent-size-function): Remove "-block-offset"
from the guessing code since it's used only by `octave-mode`.
* lisp/emacs-lisp/igc.el (igc--number-format): New variable.
(igc--format-bytes-human-readable, igc--format-bytes,
igc--format-bytes-cell, igc--format-avg-cell):
(igc--insert-info): Use them
(igc-cycle-number-format): New command.
(igc-stats-mode): Bind it to n.
We use gfm-view-mode to render Markdown before we hand over the string
to ElDoc (which usually put it in a 'special' mode "*eldoc*" buffer).
'gfm-view-mode' adds keymap text properties to make links clickable. It
also makes some of the markup invisible with a special 'invisible'
property value which is specific to 'gfm-view-mode'. We used to delete
the latter, therefore breaking the link-clicking. Simply resetting the
regions with non-nil 'invisible' to 't' instead of deleting them fixes
this. See also https://github.com/joaotavora/eglot/discussions/1238
* lisp/progmodes/eglot.el: Make invisible markup invisible
instead of deleting it.
* etc/EGLOT-NEWS: Mention bugfix.
Co-authored-by: João Távora <joaotavora@gmail.com>
* lisp/vc/log-view.el (log-view-mark-entry)
(log-view-unmark-entry): Mark ARG as a required argument, as it
in fact is.
(log-view-toggle-mark-entry): Call them properly.