Searching XEmacs
help
Quick Links About XEmacs Getting XEmacs Customizing XEmacs Troubleshooting XEmacs Developing XEmacs

XEmacs 21.5.36 "leeks" is released

goto announcement, summary, changes

From: "Aidan Kehoe" <kehoea@parhasard.net>
Subject: XEmacs 21.5.36 "leeks" is released.
Organization: The XEmacs Project
* XEmacs 21.5.36 "leeks" is released.
 "leeks" is the thirty-seventh in the VEGETABLE series.
This is a point release to get important functionality out. Important changes
are thorough support for address space layout randomization and removal of the
previous approach to incorporating the dump file by binary-patching XEmacs,
both needed to have XEmacs run successfully on recent macOS. Equally important
is Kurt Geisel's work to get XEmacs building successfully on recent Visual Studio.
Other changes include Richard Hopkins’ work to greatly improve color support
on TTYs, incorporation of GNU code that removes the need for an internal
register number for shy groups and speeds up regex matching when two branches
are mutually exclusive, better circularity checking with regular expressions,
speed-ups for important coding systems when dealing with ASCII input,
reduction in the number of function calls needed at normal startup by moving
more data to the dump file, greatly increasing the robustness of module
unloading, elimination of many memory leaks by moving subr and
symbol-value-magic objects from the data segment to the dump file (where they
had already been).
This is the development line. The current series started with XEmacs
21.5.0 (an alias for XEmacs 21.4.0 "Solid Vapor", the first release in
the current stable line). 21.5 is the code base for introduction of
major new subsystems and fixes to design bugs that experience shows will
introduce instability. So far the main effort has been on improved
support for Unicode, updates to the build infrastructure, and development
of new features in memory allocation.
For general information about XEmacs, the developers, and the user
community, see our home page,
		 http://www.xemacs.org/
* XEmacs 21.5.35 is "beta" software. 
The usual "no warranty" disclaimer (see etc/COPYING, sections 10 and 11)
applies. At this point in time, it is the version that most developers
are using for their daily work. However, it is certain that many bugs
remain and new ones will be introduced as development proceeds. Be sure
to take care to save your work often and follow a regular backup regime.
* Availability
Anonymous ftp:
 ftp://ftp.xemacs.org/pub/xemacs/xemacs-21.5
See http://www.xemacs.org/Install/ for more information about building
from source.
Also, if you don't have the packages yet, see
 http://www.xemacs.org/Documentation/packageGuide.html.
Mercurial repository:
 https://foss.heptapod.net/xemacs/xemacs
This is a read-only Mercurial repository. To check out XEmacs 21.5.35,
use the command
 hg clone -r r21-5-35 https://foss.heptapod.net/xemacs/xemacs
to create a new Mercurial workspace, or
 hg pull -u -r r21-5-35
if you already have a local workspace from Mercurial. To update to the
most recent commits to the official repository, use
 hg pull -u tip
For more details, see
 http://www.xemacs.org/Develop/hgaccess.html .

Changes in XEmacs 21.5.36 "leeks"

goto announcement, summary, changes

Major Features, Bugfixes, and Backward Incompatible Changes

User-Visible Bug Fixes and Improvements

Build Infrastructure and Source Tree

Documentation

Lisp API

Internal API and Implementation

Testing and Debugging

ChangeLogs for XEmacs 21.5.36 "kohlrabi"

goto announcement, summary, changes

ChangeLog Entries from ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年05月26日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac: Remove support for building ldap, canna,
 postgresql into the temacs binary.
 * configure: Regenerate.
2025年03月04日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac (DUMP_FILE_NAME): New, just xemacs.dmp. Use
 AC_SUBST() to make it available to Makefile.in.in.
 In passing make AC_DEFINE_UNQUOTED(SHEBANG_PROGNAME ...) a bit
 more sensible.
 * configure: Regenerate.
2025年02月24日 Stephen Turnbull <turnbull@sk.tsukuba.ac.jp>
 * Makefile.in.in:
 Find module auto-autoloads in module build tree, not source tree.
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac:
 Remove --with-mule as an option, always on.
 Remove --with-default-eol-detection as an option, only relevant
 with non-MULE.
 * configure: Regenerate.
2025年01月01日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in (install-arch-dep):
 Install DOC as DOC-DUMP-ID, to avoid the longstanding irritation
 of installing another XEmacs corrupting the docfile of a running,
 installed, XEmacs.
2024年12月24日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac (XE_COMPLEX_ARG):
 Revise --with-quick-build to turn off --with-dump-in-exec (unless
 otherwise explicitly specified), document this. Remove mention of
 garbage-collection after loading each file during dumping, no
 longer relevant.
 * configure: Regenerate.
2024年12月24日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac (libc_version): Remove detection of libc version
 from configure.ac, it is not remotely as necessary as it was a
 couple of decades ago, and Mats advises me it is buggy on Gentoo.
 * configure: Regenerate.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in:
 Install the dump file in ${archilibdir}, not in the same directory
 as the XEmacs executable, for better conformance with usual Unix
 practice.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in:
 Install the dump file properly if non-DUMP_IN_EXEC. No longer
 check the PDUMP define. This is no longer available since it is
 impossible to turn it off, unexec has been removed.
2024年11月03日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac: Only attempt to turn off ASLR if the data and text
 (C code) relative offsets are unpredictable from one invocation
 to the next.
 * configure: Regenerate.
2024年10月17日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac : No longer use XE_PROTECT_LINKER_FLAGS on LDFLAGS,
 comment as to motivation for this. Thank you Mats Lidell and the
 Gentoo users.
 * configure: Regenerate.
2023年11月26日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac: Define _XOPEN_SOURCE as 600 on Linux.
 * configure: Regenerate.
2024年02月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * Makefile.in.in (etc/PROBLEMS): Improve portability; $^ is not
 available on BSD make for example and would error with
 cp etc/PROBLEMS
 usage: cp [-R [-H | -L | -P]] [-f | -i] [-alNpv] src target
 cp [-R [-H | -L | -P]] [-f | -i] [-alNpv] src1 ... srcN directory
 *** Error code 1
 `make` now succeeds on BSD make.
2023年05月14日 Aidan Kehoe <kehoea@parhasard.net>
 * CHANGES-beta:
 Correct attribution of OpenSSL bignum support.
 Add new skeleton for 21.5.36.
2023年05月14日 Aidan Kehoe <kehoea@parhasard.net>
 * configure.ac:
 Default --with-mule to on; document this.
 * configure: Regenerate.

ChangeLog Entries from etc/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年02月24日 Aidan Kehoe <kehoea@parhasard.net>
 * TUTORIAL.cs:
 * TUTORIAL.de:
 * TUTORIAL.es:
 * TUTORIAL.fr:
 * TUTORIAL.hr:
 * TUTORIAL.ja:
 * TUTORIAL.ko:
 * TUTORIAL.ko:
 * TUTORIAL.no:
 * TUTORIAL.pl:
 * TUTORIAL.ro:
 * TUTORIAL.ru:
 * TUTORIAL.se:
 * TUTORIAL.sk:
 * TUTORIAL.sl:
 * TUTORIAL.th:
 * TUTORIAL.th:
 Add coding cookies to all the TUTORIAL files now non-MULE is gone.

ChangeLog Entries from lib-src/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月09日 Aidan Kehoe <kehoea@parhasard.net>
 * etags.c (savenstr):
 Use memset () and then memcpy() within this, silence a strncpy()
 warning with GCC 15.
 * gnuclient.c (get_current_working_directory): Always include a
 trailing slash in the return value of this, making
 filename_expand() simpler.
 * gnuclient.c (filename_expand): Take a new FULLPATH_LEN
 argument. Use snprintf() for its bounds checking and to suppress
 warnings regarding strncat() from GCC 15.
 * gnuclient.c (main):
 Pass sizeof (fullpath) to filename_expand().
 * make-docfile.c (scan_lisp_file):
 Give up if we encounter a dynamic docstring length that was not
 specified.
 Check that LENGTH is positive before writing to
 saved_string[length - 1], quiet a GCC-15 warning.
 * ootags.c (savenstr):
 Use memset () and then memcpy() within this, silence a strncpy()
 warning with GCC 15.
2025年05月27日 Aidan Kehoe <kehoea@parhasard.net>
 Remove some obsolete or minimally useful C files from lib-src/,
 reduce maintenance burden, risk of security holes.
 * Makefile.in.in:
 * Makefile.in.in (profile): Remove this target.
 * Makefile.in.in (digest-doc): Remove this target.
 * Makefile.in.in (sorted-doc): Remove this target.
 * Makefile.in.in (b2m): Remove this target.
 * Makefile.in.in (cvtmail): Remove this target.
 * Makefile.in.in (fakemail): Remove this target.
 * b2m.c: File removed. This converted Babyl format mail to mbox
 files. If someone who is not a MacArthur genius is still using
 rmail with a Babyl format inbox, that person should stop using it
 immediately, and use the pre-deletion code to convert to an mbox
 file and use VM (or theoretically Thunderbird), that person should
 not expect any support going forward.
 If any MacArthur genius wishes to use rmail, I encourage that
 individual to (continue to) use GNU Emacs, and avail of the
 development resources provided to GNU Emacs in his or her use of
 rmail.
 * cvtmail.c: File removed. This converted Gosling Emacs mail
 directories to Babyl format, so a very very obsolete format to a
 very obsolete format. I encourage anyone using Gosling Emacs mail
 directories to use older Mercurial revisions to convert their
 data.
 * digest-doc.c: File removed. This converted the output of
 make-docfile to groff(1) format. This is very easily achievable in
 Lisp and I volunteer to do this if anyone cares that the C version
 of this file was removed.
 * fakemail.c: File removed. System V is long gone, no need to
 persist with this.
 * profile.c: File removed. Not actually used by our profiling
 code, source of potential security problems, better gone.
 * sorted-doc.c: File removed.
 This converted the output of make-docfile to texinfo. This is very
 easily achievable in Lisp and I volunteer to do this if anyone
 cares that the C version of this file was removed.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * ellcc.c (do_init_mode):
 * make-docfile.c (main):
 * make-docfile.c (scan_c_file):
 Revise the approach to module encoding, make a variable
 emodule_coding available that reflects the coding system of the
 symbols and docstrings in the module, don't specify it separately
 for each docstring.
 Just use no-conversion for now, working plan is to move
 make-docfile, ellcc to Lisp, which will make it practical to use
 the coding detection infrastructure at the time of generation of
 the mod-output file.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 * make-docfile.c (scan_c_file):
 Handle DEFUN() forms with KEYWORDS as MAX_ARGS, a feature just
 added to core.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 Generate definitions for lrecord_type_##c_name, making
 DECLARE_MODULE_LISP_OBJECT() work.
 * make-docfile.c:
 * make-docfile.c (xmalloc): Change this to return void * as is
 better practice generally.
 * make-docfile.c (main):
 Print int lrecord_type_##c_name for any objects encountered.
 * make-docfile.c (scan_c_file):
 Save c_name for any object definitions encountered.
2025年03月03日 Aidan Kehoe <kehoea@parhasard.net>
 * cvtmail.c (main):
 NAME is not large enough to hold fourteen characters and a
 terminating zero, correct this. Thank you clang-19.
2025年01月22日 Aidan Kehoe <kehoea@parhasard.net>
 * etags.c:
 * etags.c (snprintf): Add a kludgy implementation of this #ifndef
 HAVE_SNPRINTF, that just exits if the buffer overflows.
 * etags.c (fn_exp):
 Use it in preference to strcpy().
 * etags.c (sort_tags_file):
 Slightly different approach to printing line endings, silencing
 warnings on OpenBSD.
 * etags.c (write_classname):
 Use snprintf() in preference to calls to strcat, strncat.
 * gnuclient.c:
 * gnuclient.c (snprintf): Add a kludgy implementation of this #ifndef
 HAVE_SNPRINTF, that just exits if the buffer overflows.
 * gnuclient.c (tell_emacs_to_resume): Use it.
 * gnuclient.c (my_strdup):
 Revise this to silence warnings.
 * gnuclient.c (main):
 Use snprintf(). Pass read_line() its new DESTSIZE argument.
 * gnuserv.c:
 * gnuserv.c (snprintf): Add a kludgy implementation of this #ifndef
 HAVE_SNPRINTF, that just exits if the buffer overflows.
 * gnuserv.c (ipc_init): Use it.
 * gnuserv.c (unix_init): Use it.
 * gnuserv.h (read_line): Update declaration.
 * gnuslib.c (read_line): Take a new DESTSIZE argument. Use
 snprintf for its bounds checking. Always zero-terminate.
2024年12月22日 Aidan Kehoe <kehoea@parhasard.net>
 * insert-data-in-exec.c: Removed.
 * Makefile.in.in (BUILD_UTILITIES): Remove insert-data-in-exec
 * Makefile.in.in (insert-data-in-exec.o): Remove this as a target.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * make-docfile.c:
 * make-docfile.c (put_filename_as_c_string): New.
 * make-docfile.c (scan_c_file): Use it.
 When dealing with modules, print the file name of the subrs and
 the coding system used for the file name and for the documentation
 string (currently just no-conversion), now that is accepted by the
 module code.
2024年08月26日 Aidan Kehoe <kehoea@parhasard.net>
 * ootags.c (main):
 RE_INTERVALS has always been included in RE_SYNTAX_EMACS, don't
 specify this explicitly.
2024年04月06日 Richard Hopkins <xemacs@unbit.co.uk>
 * etags.c (sort_tags_file): Prevent crash when updating ctags file
 for 0 tags.
2024年02月16日 Richard Hopkins <xemacs@unbit.co.uk>
 Use Boolint instead of bool - the definition is from src/lisp.h.
 This also allows building on later C versions, such as GCC 13.2
 with -std=c2x, where previously it would output...
 error: two or more data types in declaration specifiers
 => typedef int bool;
 warning: useless type name in empty declaration
 => typedef int bool;
 warning: initialization of 'int *' from incompatible pointer type '_Bool *' [-Wincompatible-pointer-types]
 => { "globals", no_argument, &globals, TRUE },
 * ootags.c (bool): Rename to Boolint.
 (Boolint): New - same definition as src/lisp.h.
 (node):
 (pfnote):
 (new_pfnote):
 (filename_is_absolute):
 (pattern):
 (fn_exp):
 (gfnames):
 (main):
 (token):
 (consider_token):
 (make_C_tag):
 (C_entries):
 (tail):
 (Pascal_functions):
 (scan_separators): Use Boolint instead of bool.
2024年02月16日 Richard Hopkins <xemacs@unbit.co.uk>
 * ootags.c (print_language_names):
 (print_version):
 (print_help):
 (fn_exp):
 (gfnames):
 (system):
 (massage_name):
 (get_language_from_name):
 (get_language_from_interpreter):
 (get_language_from_suffix):
 (process_file):
 (init):
 (find_entries):
 (pfnote):
 (new_pfnote):
 (free_tree):
 (add_node):
 (number_len):
 (total_size_of_entries):
 (C_symtype):
 (consider_token):
 (make_C_tag):
 (C_entries):
 (default_C_entries):
 (plain_C_entries):
 (Cplusplus_entries):
 (Cjava_entries):
 (Cstar_entries):
 (Yacc_entries):
 (just_read_file):
 (tail):
 (takeprec):
 (getit):
 (Fortran_functions):
 (Perl_functions):
 (Python_functions):
 (Cobol_paragraphs):
 (Pascal_functions):
 (L_isdef):
 (L_isquote):
 (L_getit):
 (Lisp_functions):
 (Postscript_functions):
 (Scheme_functions):
 (get_scheme):
 (TeX_functions):
 (TEX_mode):
 (TEX_decode_env):
 (TEX_Token):
 (Prolog_functions):
 (prolog_skip_comment):
 (prolog_pred):
 (prolog_atom):
 (Erlang_functions):
 (erlang_func):
 (erlang_attribute):
 (erlang_atom):
 (scan_separators):
 (analyse_regex):
 (add_regex):
 (substitute):
 (free_patterns):
 (initbuffer):
 (readline_internal):
 (readline):
 (savestr):
 (savenstr):
 (etags_strrchr):
 (etags_strchr):
 (skip_spaces):
 (skip_non_spaces):
 (fatal):
 (pfatal):
 (suggest_asking_for_help):
 (error):
 (concat):
 (etags_getcwd):
 (relative_filename):
 (absolute_filename):
 (absolute_dirname):
 (filename_is_absolute):
 (canonicalize_filename):
 (grow_linebuffer):
 (xmalloc):
 (xrealloc): Convert to ANSI C function definitions.
2024年02月16日 Richard Hopkins <xemacs@unbit.co.uk>
 * etags.c (print_language_names):
 (print_version):
 (print_help):
 (fn_exp):
 (gfnames):
 (system):
 (massage_name):
 (main):
 (get_compressor_from_suffix):
 (get_language_from_langname):
 (get_language_from_interpreter):
 (get_language_from_filename):
 (process_file_name):
 (process_file):
 (init):
 (find_entries):
 (make_tag):
 (pfnote):
 (free_tree):
 (free_fdesc):
 (add_node):
 (invalidate_nodes):
 (number_len):
 (total_size_of_entries):
 (put_entries):
 (hash):
 (in_word_set):
 (C_symtype):
 (pushclass_above):
 (popclass_above):
 (write_classname):
 (consider_token):
 (make_C_tag):
 (C_entries):
 (default_C_entries):
 (plain_C_entries):
 (Cplusplus_entries):
 (Cjava_entries):
 (Cstar_entries):
 (Yacc_entries):
 (just_read_file):
 (F_takeprec):
 (F_getit):
 (Fortran_functions):
 (Ada_getit):
 (Ada_funcs):
 (Asm_labels):
 (Perl_functions):
 (Python_functions):
 (PHP_functions):
 (Cobol_paragraphs):
 (Makefile_targets):
 (Pascal_functions):
 (L_getit):
 (Lisp_functions):
 (Lua_functions):
 (PS_functions):
 (Forth_words):
 (Scheme_functions):
 (TeX_commands):
 (TEX_mode):
 (TEX_decode_env):
 (Texinfo_nodes):
 (HTML_labels):
 (Prolog_functions):
 (prolog_skip_comment):
 (prolog_pr):
 (prolog_atom):
 (Erlang_functions):
 (erlang_func):
 (erlang_attribute):
 (erlang_atom):
 (scan_separators):
 (analyse_regex):
 (add_regex):
 (substitute):
 (free_regexps):
 (regex_tag_multiline):
 (nocase_tail):
 (get_tag):
 (readline_internal):
 (readline):
 (savestr):
 (savenstr):
 (etags_strrchr):
 (etags_strchr):
 (etags_strcasecmp):
 (etags_strncasecmp):
 (skip_spaces):
 (skip_non_spaces):
 (fatal):
 (suggest_asking_for_help):
 (error):
 (concat):
 (etags_getcwd):
 (relative_filename):
 (absolute_filename):
 (absolute_dirname):
 (filename_is_absolute):
 (canonicalize_filename):
 (linebuffer_init):
 (linebuffer_setlen):
 (xmalloc):
 (xrealloc): Convert to ANSI C function definitions.
2023年10月12日 Aidan Kehoe <kehoea@parhasard.net>
 Avoid another command execution vulnerability by calling qsort ()
 and then making the result unique in C.
 GNU's approach to this involved functions that are of recent
 vintage (thus, less portable) and not necessary.
 Fix up some compiler warnings in passing.
 * etags.c:
 * etags.c (do_move_file):
 Rearrange declarations, add braces to conform to old C.
 * etags.c (cmpstringp): New.
 * etags.c (sort_tags_file): New.
 Given a tag file name, load it, sort it, and make entries unique
 without calling an external program. Write the modified data back
 into the initial file. Preserve line endings. If there is no line
 ending, preserve that.
 * etags.c (cleanup_tags_file):
 Use a globally-unique name for TAGFILE. Rearrange declarations,
 add braces to conform to old C.
 * etags.c (pfatal):
2023年10月08日 Aidan Kehoe <kehoea@parhasard.net>
 * etags.c:
 * etags.c (do_move_file): New.
 * etags.c (cleanup_tags_file): New.
 * etags.c (main): Use them.
 Avoid a command execution vulnerability in this file, thank you Xi
 Lu on Heptapod; change also in GNU.

ChangeLog Entries from lisp/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月11日 Alan Mackenzie <acm@muc.de>
 Enhance the handling of syntax-table properties. This enables C-u
 C-x = (`what-cursor-position') to work on, for example,
 unterminated string delimiters in C Mode.
 * syntax.el (modify-syntax-entry): Add documentation for ! =
 comment-fence and | = string-fence in the doc string.
 * syntax.el (describe-syntax-code): In the array of syntax textual
 descriptions, replace the ?obsolete "extended-word-constituent"
 with "comment-fence", and append "string-fence".
2025年06月11日 Alan Mackenzie <acm@muc.de>
 Fontify also the last character of an unterminated string.
 * font-lock.el (font-lock-fontify-syntactically-region): Before
 subtracting 1 from the second argument to font-lock-set-face (for
 the closing double quote), check the string was actually closed.
2025年06月06日 Alan Mackenzie <acm@muc.de>
 Correct the value of regexp-opt on being given an empty list.
 * regexp-opt.el (regexp-opt): Return a regexp which doesn't match
 anything when the STRINGS argument is the empty list.
2025年06月05日 Alan Mackenzie <acm@muc.de>
 Purge the package-suppress mechanism from XEmacs.
 Make the versions of easy-mmode.el and regexp-opt.el in
 .../xemacs/lisp the active ones.
 * easy-mmode.el:
 Restore the commented out ;;;###autoload cookies.
 * packages.el:
 * packages.el (package-suppress): Removed.
2025年06月05日 Aidan Kehoe <kehoea@parhasard.net>
 Remove support for emacs implementations without #'add-timeout,
 itimer.el, significantly simplifying the file.
 * itimer.el:
 * itimer.el (itimer-version): Bump this.
 * itimer.el (itimer-timer): Update the docstring here.
 * itimer.el (itimer-process): Removed.
 * itimer.el (set-itimer-value): Just use #'itimer-timer-wakeup
 here, not #'itimer-driver-wakeup.
 * itimer.el (activate-itimer): Ditto.
 * itimer.el (list-itimers): In passing revise this to make
 #'itimer-truncate-string a label and to traverse the list of
 itimers in a more post-1990 way.
 * itimer.el (edit-itimers): Call #'itimer-timer-wakeup here.
 * itimer.el (itimer-truncate-string): Moved to being a label
 within #'list-itimers.
 * itimer.el (itimer-run-expired-timers):
 last-command-event-time, last-input-time will both always be
 bound, don't check for that.
 * itimer.el (itimer-process-filter): Removed.
 * itimer.el (itimer-disable-timeout): Removed, now equivalent to
 #'disable timeout.
 * itimer.el (itimer-process-sentinel): Removed.
 * itimer.el (itimer-timer-driver): Just call #'disable-timeout
 within this.
 * itimer.el (itimer-process-start): Removed.
 * itimer.el (itimer-driver-start): Removed.
 * itimer.el (itimer-driver-wakeup): Removed.
 * itimer.el (itimer-process-wakeup): Removed.
2025年05月26日 Aidan Kehoe <kehoea@parhasard.net>
 Support text/plain, text/plain;charset=utf-8 when cutting and
 pasting under X11, needed for more recent clients that are not
 interested in longstanding standards (Libreoffice and the terminal
 emulator Terminology in my use).
 * select.el:
 * select.el (selection-preferred-types): Add them to this.
 * select.el ('selected-text-type): Remove this obsolete name in
 passing.
 * select.el (own-selection): Fix some indentation in passing.
 * select.el (select-convert-from-undecided-text): New. Now used when
 supplied text/plain, use our coding detection to work out what
 encoding is in use.
 * select.el (selection-converter-out-alist): Add the new entries
 here. 
 * select.el (selection-converter-in-alist): And here.
 * select.el (selection-coercible-types): Fix some indentation
 here.
2025年05月25日 Alan Mackenzie <acm@muc.de>
 * regexp-opt.el (regexp-opt):
 Handle a PAREN value of `symbols' which now wraps the inner
 regular expression in the symbol brackets "\\_<" and "\\_>".
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * byte-optimize.el (byte-compile-unfold-lambda):
 No longer call #'fetch-bytecode in this, quiet a warning.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 Take an optional TEST argument, #'assoc, as does GNU. Revise
 related compiler macros to reflect this.
 * cl-macs.el:
 * cl-macs.el (assoc):
 Handle the optional TEST argument in this compiler macro. Still
 transform to an #'assq call if we can tell at compile time that
 #'eq is the appropriate test.
 * cl-macs.el (assoc*): New explicit compiler macro for this
 function, can't handle #'assoc* in the define-star-compiler-macros
 macro any more.
 * cl-macs.el (define-star-compiler-macros): Remove handling of
 #'assoc* from here.
 * custom.el (custom-current-group): This is called very early when
 #'assoc is not available, use #'assoc* instead.
 * custom.el (custom-declare-group): Ditto.
 * subr.el (assoc): New. Moved here from sequence.c.
2025年05月24日 Alan Mackenzie <acm@muc.de>
 Make "\\_<" and "\\_>" work in regexp buffer searches.
 * isearch-mode.el (isearch-search):
 Translate an error message from regex.c beginning with "Invalid "
 into "invalid input" rather than "incomplete input".
2025年05月24日 Aidan Kehoe <kehoea@parhasard.net>
 * bytecomp.el (byte-compile-lambda):
 Don't double-compile a compiled function supplied as the argument
 to (interactive ...), thank you Alan Mackenzie.
2025年05月11日 Aidan Kehoe <kehoea@parhasard.net>
 * update-elc.el:
 Correct the dependency checks when --with-dump-in-exec here.
 In passing, short circuit the checks for .el and .elc files being
 out of date with regard to the dump files, once it has been t once
 there's no need to do a stat(2) for any further files.
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 * files.el (coding-system-for-read)): defvar removed.
 * files.el (buffer-file-coding-system)): defvar removed.
 No need for these declarations now the non-mule option is gone.
 * files.el (hack-one-local-variable):
 Update a comment here.
2025年05月04日 Aidan Kehoe <kehoea@parhasard.net>
 * obsolete.el:
 * obsolete.el (cl-delete-duplicates): Removed.
 No longer needed, and conflicts with GNU's cl-lib function name
 (calling convention is distinct), better gone.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * subr.el (true-list-p):
 * subr.el (safe-length):
 Make both of these 15% faster, use Lisp boolean negation and the
 associated bytecodes for advancing the tortoise rather than
 calling #'logand on the counter
 (#'logand has no byte code).
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 * loadhist.el (feature-file):
 * loadhist.el (file-symbols):
 * loadhist.el (unload-feature):
 Modernize loadhist.el; return structured errors, use
 #'file-system-ignore-p to determine the comparison function when
 testing, use #'remove* instead of #'delete + #'copy-sequence.
 No need to wrap #'unload-module in #'declare-fboundp given
 HAVE_SHLIB is the default.
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 * loadup.el (member):
 No need to explicitly set stack-trace-on-error, debug-on-error to
 nil before dump.
2025年03月11日 Aidan Kehoe <kehoea@parhasard.net>
 * subr.el (replace-list):
 Correct a bug in this implementation just elicited in frame.c,
 thank you Stephen Turnbull.
2025年03月08日 Aidan Kehoe <kehoea@parhasard.net>
 * subr.el (replace-list): New. Moved here from fns.c.
 * subr.el ('substring): Removed. Alias now created in sequence.c.
2025年03月06日 Aidan Kehoe <kehoea@parhasard.net>
 * unicode.el:
 Move some code that tested unicode-error-default-translation-table
 and unicode-invalid-sequence-regexp-range to
 ../tests/automated/regexp-tests.el.
2025年03月01日 Aidan Kehoe <kehoea@parhasard.net>
 * startup.el (early-error-handler):
 Move #'force-debugging-signal inside the binding of STREAM, fix a
 bug and avoid a compile-time warning.
2025年02月24日 Aidan Kehoe <kehoea@parhasard.net>
 Remove checks for (featurep 'mule) from core Lisp, making our code
 a little more maintainable. The Lisp side of eed34ee08c9b . 
 * autoload.el (autoload-featurep-protect-autoloads):
 * bytecomp.el (byte-recompile-ignore-uncompilable-mule-files):
 Removed. No longer needed with removal of support for non-Mule.
 * bytecomp.el (byte-recompile-directory):
 Always execute the Mule-specific code.
 * bytecomp.el (byte-recompile-file): Ditto.
 * bytecomp.el (byte-compile-file): Ditto.
 * bytecomp.el (byte-compile-maybe-reset-coding): Ditto.
 * code-init.el:
 * code-init.el (eol-detection-enabled-p): Default this to
 t. Remove docstring commentary that is no longer true.
 * code-init.el (set-eol-detection):
 Remove docstring commentary that is no longer true.
 * code-init.el (coding-system-current-system-configuration):
 Remove the non-Mule options for this.
 * code-init.el (define-coding-system-default-configuration):
 Remove the no-mule-no-eol-detection, no-mule-eol-detection,
 windows-no-mule calls for this.
 * code-init.el (reset-coding-categories-to-default):
 Correct indentation here. Always execute the Mule code.
 * coding.el: Remove some non-Mule code, no longer needed.
 * compose.el:
 Use Unicode character literals instead of load time #'decode-char
 calls. No need to construct a big if statement at load time
 depending on whether characters can be decoded.
 * dumped-lisp.el (preloaded-file-list):
 Always load the Mule-relevant files.
 * fill.el (fill-move-forward-to-break-point):
 * fill.el (fill-region-as-paragraph):
 Always call the kinsoku processing in this file.
 * finder.el (finder-known-keywords):
 Always include Mule in the keywords.
 * gtk-font-menu.el (gtk-reset-device-font-menus):
 * gtk-font-menu.el (gtk-font-menu-font-data):
 Don't check (featurep 'mule) here.
 * help.el:
 * help.el (tutorial-supported-languages): Removed.
 This has actually been basically unused for decades, information
 taken from the language environment.
 * help.el (help-with-tutorial):
 Use #'read-language-name unconditionally when reading args.
 Trust the coding cookies in the tutorial files, just added, don't
 bind coding-system-for-read.
 * iso8859-1.el:
 Remove some non-Mule code.
 * menubar-items.el (default-menubar):
 Unconditionally include entries relevant to Mule.
 * menubar-items.el (tutorials-menu-filter):
 Ditto.
 * msw-font-menu.el (mswindows-font-menu-font-data):
 Don't check (featurep 'mule) here.
 * newcomment.el (comment-indent-new-line):
 Always call kinsoku processing here.
 * package-get.el (package-get):
 Never error because of no Mule support.
 * packages.el (packages-package-hierarchy-directory-names):
 Unconditionally include the Mule packages.
 * paragraphs.el (sentence-end-without-space):
 Update this to assume Mule is always available.
 * paragraphs.el (sentence-end-base): Ditto.
 * select.el (selection-preferred-types):
 Always include COMPOUND_TEXT here.
 * simple.el (do-auto-fill):
 Always call kinsoku processing here.
 * startup.el (command-line):
 * startup.el (splash-screen-window-body):
 * startup.el (startup-setup-paths):
 * startup.el (startup-setup-paths-warning):
 * startup.el (startup-load-autoloads):
 Always call the Mule code in this file. Remove non-Mule code.
 * syntax.el (describe-char-table): Ditto.
 * unicode.el: Ditto.
 * update-elc-2.el:
 * update-elc-2.el (update-elc-ignored-dirs):
 Never include "mule/" in this .
 * update-elc-2.el (batch-update-elc-2):
 Always call the Mule code within this.
 * update-elc.el:
 * update-elc.el (update-elc-files-to-compile):
 Ditto.
 * version.el (emacs-version):
 Always include ", Mule" in the version string.
 * x-font-menu.el (x-reset-device-font-menus-core):
 Remove non-Mule code.
 * x-font-menu.el (x-font-menu-font-data-xft): Ditto.
 * x-font-menu.el (x-font-menu-font-data-core): Ditto.
2025年02月22日 Aidan Kehoe <kehoea@parhasard.net>
 Remove byte-compile-dynamic from the byte compiler, no longer
 worth the decrease in speed and difficulties with files being
 recompiled and offsets getting incorrect with with RAM sizes as
 they are.
 * bytecomp.el:
 * bytecomp.el (byte-compile-dynamic-docstrings): Default this to
 t. Document that it is not currently implemented for files with
 character or string literals with numeric value above ?\xFF.
 * bytecomp.el (byte-compile-dynamic): Removed.
 * bytecomp.el (byte-compile-close-variables):
 Remove byte-compile-dynamic from here.
 * bytecomp.el (byte-compile-from-buffer): Ditto.
 * bytecomp.el (byte-compile-maybe-reset-coding): Ditto.
 * bytecomp.el (byte-compile-output-docform): Ditto.
 * bytecomp.el (byte-compile-file-form-defmumble): Ditto.
 * obsolete.el (fetch-bytecode): New. Moved here from bytecode.c.
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 * simple.el (kill-forward-chars): Removed.
 This has always been supplied a fixnum argument by #'delete-char
 as far back as our version control goes, so it adds no value
 beyond #'delete-char calling #'kill-region directly.
 Unsurprisingly it is not used in packages.
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * obsolete.el (make-local-handler):
 Add a handler that errors on attempting
 `make-variable-buffer-local' on before-change-function,
 after-change-function.
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * cmdloop.el (self-insert-internal): New.
 Move this here from cmds.c, never called frequently enough to
 merit being in C.
2025年01月13日 Aidan Kehoe <kehoea@parhasard.net>
 * minibuf.el (read-number):
 Call (ding nil ...) for symmetry with the completing-read code,
 don't abort keyboard macros as does (beep) without arguments.
2025年01月12日 Aidan Kehoe <kehoea@parhasard.net>
 * startup.el (early-error-handler):
 If (featurep 'debug-exemacs) and otherwise about to exit, call
 #'force-debugging-signal within this function and not from C.
2025年01月06日 Aidan Kehoe <kehoea@parhasard.net>
 * obsolete.el:
 * obsolete.el (before-change-function):
 * obsolete.el (after-change-function):
 Move the implementation of these obsolete variables to Lisp, using
 symbol-value handlers.
2024年12月24日 Aidan Kehoe <kehoea@parhasard.net>
 No longer GC after loading every file when dumping, there is no
 benefit to this with pdump.
 Rationalise things with this, no longer make a #'pureload function
 available at any point, examine the output of (emacs-run-status)
 instead.
 * auto-show.el:
 Fix a bug with this, turn on auto-show-mode if we are currently
 dumping, rather than if the symbol pureload is bound as a
 variable.
 * cus-face.el (custom-declare-face):
 * dumped-lisp.el (preloaded-file-list):
 Remove mention of #'pureload from comments in these files.
 * loadup.el:
 Don't bind gc-cons-threshold within code to load those files in
 preloaded-file-list.
 Rationalise things a bit, print the load path as it is actually
 determined, not before it is set.
 Remove some debugging code that will now never be called, since
 #'load errors rather than returning nil.
 * site-load.el:
 * site-load.el (file-exists-p):
 Just (mapc #'load site-load-packages), no need for a pureload
 macro.
 * update-elc.el (preloaded-file-list):
 Modernise some error-handling code here, now #'format is not
 built-in.
2024年12月24日 Aidan Kehoe <kehoea@parhasard.net>
 * loadup.el (member):
 #'really-free is never bound these days, remove mention of it.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * setup-paths.el (paths-emacs-root-p):
 Remove autodetection of exec-directory including /libexec/, since
 we are tightening up allowed paths with the dump file
 --without-dump-in-exec.
2024年12月17日 Aidan Kehoe <kehoea@parhasard.net>
 * glyphs.el (toolbar-button-p): New. Moved here from toolbar.c,
 keep it available on non-toolbar builds.
 * specifier.el (toolbar-specifier-p): New. Moved here from
 toolbar.c, keep it available on non-toolbar builds.
 * loadup.el:
 Remove stub implementations of these functions from loadup.el.
2024年11月30日 Aidan Kehoe <kehoea@parhasard.net>
 * info.el (Info-extract-dir-entry-from):
 Use #'Info-insert-file-contents' rather than
 #'insert-file-contents in this file, handling compressed files
 appropriately. Thank you for the bug report, Mats Lidell.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * loadhist.el (symbol-file):
 Return the C source file for symbols loaded from modules, now that
 is available.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * loadhist.el (unload-feature):
 Do a better job within this function, check for defun as the first
 element of a cons entry in load-history and #'fmakunbound
 appropriately.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * help.el (describe-function-1):
 Simplify this function a little.
 * loadhist.el (symbol-file):
 Handle subrs and vars loaded from modules better within this
 function.
2024年10月13日 Aidan Kehoe <kehoea@parhasard.net>
 * subr.el (max, min):
 Move these here from data.c, for the sake of mantainability and no
 loss of speed.
 We have been returning markers from these functions since 2018
 without problems; change things slightly to never convert the
 arguments.
2024年08月18日 Aidan Kehoe <kehoea@parhasard.net>
 * files.el (find-file-noselect-1):
 * gutter-items.el (clear-progress-feedback):
 * gutter-items.el (abort-progress-feedback):
 * gutter-items.el (raw-append-progress-feedback):
 * simple.el (clear-message):
 * simple.el (remove-message):
 * simple.el (raw-append-message):
 `inhibit-read-only' is a local variable in the minibuffer (see
 Kyle Jone's commit of 1997年11月16日) and so binding it and then
 calling #'erase-buffer without making the relevant buffer current
 can fail. Correct this, avoid wedging the echo area with
 blink-matching-open and read-only duplicable extents.
2024年06月20日 Aidan Kehoe <kehoea@parhasard.net>
 * bytecomp-runtime.el (byte-compile-annotate-interactive): New.
 Return a list to aid #'call-interactively in constructing
 command-history, analysing its argument S-expression and returning
 a list that documents which arguments in an interactive form
 should be replaced by explicit calls to (point), (mark) and
 friends in the command history.
 Called both at compile time and at runtime.
 * bytecomp.el (byte-compile-lambda): Use it. Always compile and
 save the interactive spec, as a compiled function that returns a
 cons comprising the metadata as its car and the result of
 calling the S-expression as its cdr.
2024年06月25日 Aidan Kehoe <kehoea@parhasard.net>
 * apropos.el (apropos-internal):
 Move this here from symbols.c, add an autoload cookie. There is
 minimal speed advantage now to having this in Lisp and this file
 is a better place for it than symbols.c.
2024年05月06日 Aidan Kehoe <kehoea@parhasard.net>
 * simple.el (current-command-is-motion):
 Make the value for xemacs-mod-shift more robust, work it out by
 generating an event with the shift modifier at byte-compile time
 and querying it for its modifier bits.
2024年04月15日 Aidan Kehoe <kehoea@parhasard.net>
 * info.el (Info-find-file-node):
 Ensure buffer-file-coding-system reflects the coding system of the
 current Info file by killing its local value on loading a fresh
 Info superfile. This makes the anchor handling more reliable.
 * info.el (Info-load-subfile):
 Force the coding system determined for the superfile to apply to
 the subfile (since the superfile routinely has coding cookies that
 the subfile lacks.)
2024年05月01日 Aidan Kehoe <kehoea@parhasard.net>
 * cmdloop.el (maybe-display-char): New.
 If #'read-char, #'read-char-exclusive, #'read-quoted-char are
 supplied a PROMPT argument, echo the character read for better
 user feedback and for symmetry with #'read-string and friends. Do
 not echo if PROMPT is nil.
2024年03月23日 Aidan Kehoe <kehoea@parhasard.net>
 Add support for anchors within #'Info-find-file-node, by means of
 triangulating back from the previous or next nodes. Thank you for
 the bug report, Mats Lidell.
 * info.el:
 * info.el (Info-tag-table-marker): Removed.
 * info.el (Info-tag-table-buffer): Removed.
 * info.el (Info-tag-table): New variable.
 * info.el (Info-tag): New structure.
 * info.el (Info-subfiles): New variable.
 * info.el (Info-load-tag-table): New function. To be called at the
 time of loading of an info file, parses the textual tag table into
 a list documenting tag names, subfile names, and byte offsets.
 * info.el (Info-find-file-node):
 Revise to use the tag table parsed at the time the file is
 loaded.
 * info.el (Info-read-subfile): Removed. This no longer fits our
 needs.
 * info.el (Info-load-subfile): New. Similar function to previous,
 explicitly takes the file name to be loaded. 
 * info.el (Info-build-node-completions):
 Use Info-tag-table when constructing the node completions.
 * info.el (Info-search):
 Use Info-subfiles when iterating through the subfiles when
 searching.
 * info.el (Info-mode):
 * info.el (Info-cease-edit):
 Remove use of variables that are no longer in use in these functions.
2024年03月01日 Richard Hopkins <xemacs@unbit.co.uk>
 * term/xterm.el: Define Insert + Delete with modifiers in
 `function-key-map'.
2024年02月29日 Richard Hopkins <xemacs@unbit.co.uk>
 * term/xterm.el: Define Page Up + Page Down keys
 (prior, next) with all modifier combinations in
 `function-key-map'.
2023年10月24日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-lookup-rgb-components): Inhibit
 "Note: file is write protected" - we're only doing lookups in a
 hidden buffer.
2023年10月21日 Richard Hopkins <xemacs@unbit.co.uk>
 * tty-init.el (make-device-late-tty-entry-point): Register
 standard XTerm 256 colors when the device supports 256 colors.
 The color names are "color-N" which is based on the the XTerm
 number and is also used on GNU Emacs.
2023年10月18日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-parse-rgb-components): Add and use
 scale-rgb-components to correct scaling of rgb:hex/hex/hex
 variants and the 3 digit per component #hex string.
2023年10月17日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-parse-rgb-components): Correct scaling of colors
 with a single hex digit per component.
2023年10月16日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-parse-rgb-components): Correct scaling of colors
 in #fefefe format. This also fixes usages of
 #'font-color-rgb-components with input strings having a component
 range of
 a) [0.0, 1.0]
 b) [0, 255]
 as it uses the #fefefe format as an intermediary.
2023年10月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-lookup-rgb-components): Correct scaling of an rgb
 component read from rgb.txt. This is easily shown using "white"
 which should return (65535 65535 65535).
2023年10月14日 Richard Hopkins <xemacs@unbit.co.uk>
 * font.el (font-tty-find-closest-color): Use
 #'find-tty-closest-color instead. Add optional device arg for use
 by #'find-tty-closest-color.
 * font.el (font-normalize-color): Pass along device to
 #'font-tty-find-closest-color.
2023年08月11日 Richard Hopkins <xemacs@unbit.co.uk>
 * term/xterm.el: Define motion keys (left,right,up,down,home,end)
 with all modifier combinations in `function-key-map'.
2023年08月05日 Richard Hopkins <xemacs@unbit.co.uk>
 * tty-init.el (make-device-late-tty-entry-point): Provide RGB
 values to #'register-tty-color for the basic 16 colors.
2023年08月06日 Aidan Kehoe <kehoea@parhasard.net>
 * events.el (key-press-event-p):
 Make this into a defsubst*, for the sake of
 #'handle-pre-motion-command.
 * simple.el (motion-keys-for-shifted-motion):
 Update the default value (and the suggested values) of this to put
 the keys in their canonical form, so #'canonicalize-keysym has no
 need to cons.
 * simple.el (current-command-is-motion): New. The following, moved
 to being a label with a shorter name.
 * simple.el (current-command-is-motion): New. The following, moved
 to being a label with a shorter name.
 * simple.el (handle-pre-motion-command-current-command-is-motion):
 Removed.
 * simple.el (command-event-is-shifted): New label, for the use of
 #'handle-pre-motion-command, #'handle-post-motion-command;
 reworked to avoid consing for both these very commonly called
 functions.
 * simple.el (handle-pre-motion-command): Rework this to delay
 calling #'current-command-is-motion as late as possible, and to
 use #'command-event-is-shifted.
 * simple.el (handle-post-motion-command):
 Ditto.
2023年08月05日 Aidan Kehoe <kehoea@parhasard.net>
 * simple.el (motion-keys-for-shifted-motion):
 Adjust the docstring of this for readability, adjusts its
 suggested custom values to include the defaults.
 * simple.el (handle-pre-motion-command-current-command-is-motion):
 Examine last-command-event, not last-input-event, in this
 function, avoiding issues with function-key-map and TTY consoles
 which make end, home, etc available via it.
 * simple.el (handle-pre-motion-command):
 * simple.el (handle-post-motion-command):
 Examine this-command-keys-shift-translated in these functions,
 newly made available in event-stream.c
2023年07月22日 Richard Hopkins <xemacs@unbit.co.uk>
 * tty-init.el (make-device-early-tty-entry-point): Move color
 registration to #'make-device-late-tty-entry-point as it needs to
 know which device it's for.
 * tty-init.el (make-device-late-tty-entry-point): New.

ChangeLog Entries from lwlib/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月09日 Aidan Kehoe <kehoea@parhasard.net>
 * xlwtabs.c (DrawTab):
 Remove colorDBG here, use colorBG instead, avoid a
 set-but-not-used warning with GCC-15.
2024年08月22日 Aidan Kehoe <kehoea@parhasard.net>
 * lwlib.h (MINL): Move this #define here.
 * lwlib-colors.c: Remove duplicate #define of MINL.
 * lwlib-fonts.h: Remove duplicate #define of MINL.
 * lwlib.h: Remove duplicate #define of MINL.
 * xlwscrollbar.c (VERT): Remove duplicate #define of MINL.
2024年08月18日 Aidan Kehoe <kehoea@parhasard.net>
 * lwlib-fonts.c:
 * lwlib-fonts.c (xft_open_font_by_name):
 * lwlib-fonts.c (x_xft_text_width): Move to this file.
 * lwlib-fonts.h:
 Declare NAME for this xft_open_font_by_name as const char *, a
 better practice anyway and placates the C++ build.
 Declare x_xft_text_width here.
 * xlwmenu.c (x_xft_text_width): Remove from this file.
 * xlwtabs.c (x_xft_text_width): Remove from this file.
2024年04月29日 Aidan Kehoe <kehoea@parhasard.net>
 Use the newer _CONST_X_STRING X11 #define instead of the
 xt-wrappers.h approach to suppressing warnings with string
 constants used for X11 String types. Update various declarations
 to String rather than char * to work better with this.
 Remove the Xt_RESOURCE macro, which basically hid casts to
 String. Remove the Xt_SET_ARG macro for the same reason,
 Keep the Xt_SET_VALUE, Xt_GET_VALUE convenience macros, they
 remain of use. Put them in lwlib-internal.h.
 Use BEGIN_C_DECLS/END_C_DECLS in lwlib-colors.h, xlwmenu.h,
 xlwmenuP.h, for a cleaner C++
 build.
 Remove xt-wrappers.h.
 * lwlib-Xm.c: Motif does not respect _CONST_X_STRING, its headers
 explicitly use char * despite that the man pages use String. Mark
 casts used to work around this with MOTIF_STRING() so they can be
 more easily corrected in the future if that becomes possible.
 * lwlib-Xaw.c (xaw_update_scrollbar):
 * lwlib-Xaw.c (xaw_update_one_widget):
 * lwlib-Xaw.c (make_dialog):
 * lwlib-Xaw.c (xaw_generic_callback):
 * lwlib-Xaw.c (xaw_create_scrollbar):
 * lwlib-Xaw.c (xaw_create_button):
 * lwlib-Xaw.c (xaw_create_label):
 * lwlib-Xaw.c (xaw_create_progress):
 * lwlib-Xaw.c (xaw_create_text_field):
 * lwlib-Xlw.c (xlw_create_menubar):
 * lwlib-Xlw.c (xlw_create_popup_menu):
 * lwlib-Xlw.c (xlw_create_scrollbar):
 * lwlib-Xlw.c (xlw_update_scrollbar):
 * lwlib-Xlw.c (xlw_tab_control_callback):
 * lwlib-Xlw.c (xlw_create_tab_control):
 * lwlib-Xlw.c (build_tabs_in_widget):
 * lwlib-Xlw.c (xlw_create_clip_window):
 * lwlib-Xm.c:
 * lwlib-Xm.c (safe_strdup):
 * lwlib-Xm.c (xm_update_label):
 * lwlib-Xm.c (xm_update_progress):
 * lwlib-Xm.c (xm_update_toggle):
 * lwlib-Xm.c (xm_update_radiobox):
 * lwlib-Xm.c (make_menu_in_widget):
 * lwlib-Xm.c (update_one_menu_entry):
 * lwlib-Xm.c (xm_update_text):
 * lwlib-Xm.c (xm_update_text_field):
 * lwlib-Xm.c (xm_update_scrollbar):
 * lwlib-Xm.c (xm_update_one_widget):
 * lwlib-Xm.c (make_dialog):
 * lwlib-Xm.c (recenter_widget):
 * lwlib-Xm.c (recycle_instance):
 * lwlib-Xm.c (make_menubar):
 * lwlib-Xm.c (make_scrollbar):
 * lwlib-Xm.c (xm_create_button):
 * lwlib-Xm.c (xm_create_progress):
 * lwlib-Xm.c (xm_create_text_field):
 * lwlib-Xm.c (xm_create_label):
 * lwlib-Xm.c (xm_create_combo_box):
 * lwlib-Xm.c (xm_popup_menu):
 * lwlib-Xm.c (set_min_dialog_size):
 * lwlib-colors.h:
 * lwlib-internal.h:
 * lwlib.c:
 * lwlib.c (Widget lw_menubar_widget): No need to initialize to
 NULL, done automatically.
 * lwlib.c (lw_get_widget_value_for_widget):
 * lwlib.c (lw_internal_update_other_instances):
 * lwlib.h:
 * xlwcheckbox.c:
 * xlwcheckbox.c (res):
 * xlwgauge.c:
 * xlwgauge.c (res):
 * xlwgauge.c (GaugeDestroy):
 * xlwgauge.c (GaugeExpose):
 * xlwgauge.c (GaugeSelect):
 * xlwgauge.c (GaugeLoseSel):
 * xlwgauge.c (MaxLabel):
 * xlwmenu.c:
 * xlwmenu.c (_CONST_X_STRING):
 * xlwmenu.c (xlwMenuResources):
 * xlwmenu.c (string_width):
 * xlwmenu.c (string_width_u):
 * xlwmenu.c (resource_widget_value):
 * xlwmenu.c (string_draw_range):
 * xlwmenu.c (string_draw_u):
 * xlwmenu.h:
 * xlwmenuP.h:
 * xlwmenuP.h (MERCHANTABILITY):
 * xlwradio.c:
 * xlwscrollbar.c:
 * xlwscrollbar.c (res):
 * xlwscrollbar.c (resources):
 * xlwtabs.c (res):
 * xlwtabs.c (resources):
 * xlwtabs.c (TabsSetValues):
 * xlwtabs.c (TabsChangeManaged):
 * xlwtabs.c (XawTabsSetTop):
 * xt-wrappers.h: File removed.

ChangeLog Entries from man/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月05日 Alan Mackenzie <acm@muc.de>
 * lispref/packaging.texi (Makefile):
 Document the removal of the PACKAGE_SUPPRESS target from XEmacs's
 Makefile mechanism.
2025年05月26日 Aidan Kehoe <kehoea@parhasard.net>
 * emodules.texi (Distribution with XEmacs):
 Document that support for building modules into temacs has been
 removed.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Writing New Modules):
 Update to reflect reduced restrictions on C code now unexec is
 gone. Remove mention of sheap.c in passing.
 * emodules.texi: Revise and update this given recent changes to
 emodules.c.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * lispref/lists.texi (Association Lists):
 Update documentation of #'assoc here, now it has an optional TEST
 argument.
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs/custom.texi (File Variables):
 Document coding: here as another of the special variables in a
 local variables list.
2025年05月07日 Aidan Kehoe <kehoea@parhasard.net>
 * lispref/searching.texi (Syntax of Regexps):
 Document \_<, \_> here, text from GNU. Flesh out the documentation
 for \<, \> in passing.
2025年05月04日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Obarrays):
 @end a defun clause here for #'intern, fix the build.
2025年05月04日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Basic Lisp Modules):
 * internals/internals.texi (Modules for Other Aspects of the Lisp
 Interpreter and Object System):
 * internals/internals.texi (The XEmacs Object System (Abstractly
 Speaking)):
 * internals/internals.texi (Symbol):
 * internals/internals.texi (Obarrays):
 * internals/internals.texi (Symbol Values):
 * lispref/symbols.texi (Symbol Components):
 * lispref/symbols.texi (Creating Symbols):
 Update both these files to reflect current reality, where OBARRAY
 is a Lisp hash table and not a traditional Emacs obarray. Document
 that Common Lisp packages should be implemented for XEmacs.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Symbol Values):
 Mention that GNU Emacs still implements Qunbound as a symbol in
 documentation of that.
2025年04月19日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Top):
 Remove entry for the Remaining issues:: node, obsolete.
 * internals/internals.texi (Adding Global Lisp Variables):
 Update the documentation of the symbol-value-forward object.
 * internals/internals.texi (GCPROing):
 Ditto. No longer state that an implicit staticpro() happens with
 DEFVAR_FOO().
 * internals/internals.texi (General internal changes):
 Remove mention of the annotation of staticpro names.
 * internals/internals.texi (Dumping):
 Document the shuffling of heap addresses to STATICPROS_NODUMP.
 * internals/internals.texi (Object inventory): Remove mention of
 implicit handling of STATICPROS, since that is now done
 explicitly.
 * internals/internals.texi (Pointers dumping):
 Mention that we use C23's #embed directive if available for
 DUMP_IN_EXEC.
 * internals/internals.texi (Remaining issues): Removed, all these
 are obsolete (none of the commmon platforms will tolerate
 relocation as suggested; we have the executable signature already
 implemented; and there is no need for DOC to end up in the dump
 file).
2024年12月22日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Reloading phase):
 Give information on INCBIN and the current approach to
 DUMP_IN_EXEC.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Authorship of XEmacs):
 Correct some typos in this.
 * internals/internals.texi (Reloading phase):
 Update documentation of reloading to reflect things as they are
 now.
2025年01月01日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Symbol Values):
 Update documentation of Qunbound, now it is of type opaque rather
 than symbol-value-magic.
2024年11月03日 Aidan Kehoe <kehoea@parhasard.net>
 * internals/internals.texi (Object inventory):
 Update and correct some documentation of pdump here.
2024年08月26日 Aidan Kehoe <kehoea@parhasard.net>
 * lispref/searching.texi (Syntax of Regexps):
 Clarify some syntax related to regexp character sets, groups,
 zero-length shy groups.
2024年02月18日 Richard Hopkins <xemacs@unbit.co.uk>
 * beta.texi (Building XEmacs from a full distribution): Add @item
 for each command. This resolves
 warning: @enumerate has text but no @item
2024年02月17日 Richard Hopkins <xemacs@unbit.co.uk>
 * internals/internals.texi (OpenSSL bignum driver): Use @pxref
 instead of @xref for 'BSD MP driver' as it's inside parentheses
 and also resolves older Texinfo outputting...
 warning: `.' or `,' must follow @xref, not `)'.

ChangeLog Entries from modules/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月09日 Aidan Kehoe <kehoea@parhasard.net>
 * canna/canna_api.c:
 * canna/canna_api.c (Fcanna_initialize):
 Silence a warning regarding passing const strings to
 jrKanjiControl() by using a file-static APPNAME variable.
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 * postgresql/postgresql.c:
 * postgresql/postgresql.c (PG_OS_CODING):
 * postgresql/postgresql.c (allocate_pgconn):
 * postgresql/postgresql.c (allocate_pgresult):
 * postgresql/postgresql.c (finalize_pgresult):
 * postgresql/postgresql.c (Fpq_client_encoding):
 * postgresql/postgresql.c (syms_of_postgresql):
 * postgresql/postgresql.c (vars_of_postgresql):
 * postgresql/postgresql.c (init_postgresql_from_environment):
 Remove compatibility code that attempted to work with XEmacs 21.1,
 21.4.
 Move DEFINE_NODUMP_LISP_OBJECT() to syms_of_postgresql(). Remove
 #ifdef MULE.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 * postgresql/postgresql.h:
 * ldap/eldap.h:
 Declare Lisp_LDAP, Lisp_PGconn, Lisp_PGresult using
 DECLARE_MODULE_LISP_OBJECT().
2025年03月15日 Aidan Kehoe <kehoea@parhasard.net>
 * ldap/eldap.c:
 * ldap/eldap.c (syms_of_eldap):
 Move the DEFINE_NODUMP_LISP_OBJECT call to syms_of_eldap().
 * ldap/eldap.c (unload_eldap):
 Call UNDEF_MOMDULE_LISP_OBJECT() rather than UNDEF_LISP_OBJECT()
 here, now the latter has been removed.
 * postgresql/postgresql.c (unload_postgresql):
 Ditto.
2025年01月23日 Aidan Kehoe <kehoea@parhasard.net>
 * canna/canna_api.c:
 Update types of those C variables referenced by DEFVAR_BOOL() to
 Boolint, as was just done in ../src/.

ChangeLog Entries from nt/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月07日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.mak:
 Add sysdll.obj to TEMACS_COMMON_OBJS, unbreaking the Windows build
 (though, sigh, not actually adding support for modules on Windows,
 which has yet to be done.)
2025年05月27日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.mak (LIB_SRC_TOOLS):
 Remove sorted-doc.exe from here, Other obsoleted targets not
 needed.
o2025-03-04 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.mak (PROGRAM_DEFINES): Add EMACS_DUMP_FILE_NAME to these,
 just added to configure.ac.
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 Remove --without-mule as an option given maturity of the Mule
 code and limited development resources to devote to non-Mule bugs
 and features.
 * config.inc.samp:
 * config.inc.samp (MULE): Removed, can no longer be set to zero.
 * xemacs.mak:
 * xemacs.mak (MULE): Remove conditional code dealing with this.
 * xemacs.mak (OPT_DEFINES): Remove -DMULE.
 * xemacs.mak (OPT_OBJS): Move the Mule object files to
 TEMACS_COMMON_OBJS. 
 * xemacs.mak (TEMACS_COMMON_OBJS):
2025年02月01日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.mak:
 Remove optimization flags specifying that the target is Pentium,
 no longer supported by Visual Studio.
2025年02月01日 Aidan Kehoe <kehoea@parhasard.net>
 Supply reasonable defaults for Perl, Mercurial and makeinfo for
 the native Windows build.
 * config.inc.samp:
 * config.inc.samp (CYGWIN_ROOT): New. Root of Cygwin on this
 machine, used to find perl, python.
 * config.inc.samp (PERL): New. Default place to find a Perl
 install.
 * config.inc.samp (PYTHON): New. Default place to find a Python
 executable. 
 * config.inc.samp (HG): New. How to get a Mercural command.
 * config.inc.samp (MAKEINFO): Set this to a value that currently
 works, now makeinfo(1) is a Perl script on Cygwin.
 * xemacs.mak:
 * xemacs.mak (depend): Use $(PERL).
 * xemacs.mak (unicode-encapsulate): Use $(PERL).
 * xemacs.mak (makeinfo-test): Correct syntax for this.
2025年02月01日 Aidan Kehoe <kehoea@parhasard.net>
 * config.inc.samp (MULE):
 Turn this on by default.
2025年01月27日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.dsp: Remove mention of ntheap.c, ntheap.h from this file,
 no longer needed in absence of unexec.
 * xemacs.mak:
 * xemacs.mak (USE_SYSTEM_MALLOC): Removed. Always on, #define
 removed.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.dsp: Remove mention of lastfile.c from this file.
 * xemacs.mak:
 * xemacs.mak (LASTFILE): Removed.
 * xemacs.mak (LASTFILE_SRC): Removed.
 * xemacs.mak (LASTFILE_FLAGS): Removed.
 * xemacs.mak (LASTFILE_OBJS): Removed.
 * xemacs.mak (TEMACS_LIBS):
 * xemacs.mak ($(RAW_EXE)):
 Remove mention of lastfile.c from this file, not needed with
 PDUMP.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * config.inc.samp:
 * config.inc.samp (USE_PORTABLE_DUMPER):
 * config.inc.samp (USE_KKCC):
 * config.inc.samp (NEW_GC):
 Remove mention of these options. The first two are the default and
 cannot be turned off, the last has been removed.
2024年11月03日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.mak (TEMACS_COMMON_ASLR_LFLAGS): Removed.
 * xemacs.mak (TEMACS_COMMON_LFLAGS):
 Remove the flags to disable ASLR from this, now that pdump
 supports it without problems. Tested on Windows 11 with Visual
 Studio 2022 today.
 Remove also flags dating from Windows 95 days that explicitly
 specify the heap and base (the text segment) addresses, leave that
 to the system. Keep the flag specifying an 8 megabyte stack, we're
 quite heavy on alloca() in Windows terms.
2023年10月20日 Aidan Kehoe <kehoea@parhasard.net>
 Some changes to get the latest beta building with Visual
 Studio from Kurt Geisel <kgeisel@outlook.com>. Thank you Kurt!
 * xemacs.mak:
 Only generate manifest information for the executable if the
 corresponding FILE.manifest has been generated.
 * xemacs.mak (TEMACS_COMMON_ASLR_LFLAGS): New.
 Disable ASLR if the compiler would otherwise enable it.

ChangeLog Entries from src/ChangeLog

goto announcement, summary, changes

2025年06月11日 Alan Mackenzie <acm@muc.de>
 Enhance the handling of syntax-table properties. This enables C-u
 C-x = (`what-cursor-position') to work on, for example,
 unterminated string delimiters in C Mode.
 * syntax.c (Fchar_syntax): Enhance to handle a cons as argument
 SYNTAX_TABLE, treating this as an internal syntax code.
2025年06月07日 Aidan Kehoe <kehoea@parhasard.net>
 * s/windowsnt.h (HAVE_SHLIB):
 Windows supports dynamic loading of shared libraries, always
 #define this.
2025年06月09日 Aidan Kehoe <kehoea@parhasard.net>
 * array.h (Stynarr_verify_pos):
 Work around buggy warnings with the GCC-15 optimizer in this
 function. See comment.
 * backtrace.h (PUSH_BACKTRACE):
 Silence a dangling pointer warning with GCC-15 in this macro. The
 entire point of the macro is storing a stack address in a global
 variable, there is no other way to address this.
 * compiler.h (PRAGMA_PUSH_DIAGNOSTICS): New.
 * compiler.h (PRAGMA_POP_DIAGNOSTICS): New.
 * compiler.h (PRAGMA_IGNORE_DANGLING_POINTER): New.
 * compiler.h (PRAGMA_IGNORE_DEPRECATED): New.
 Provide these macros on GCC and clang, expanding to DO_NOTHING on
 other compilers.
 * emacs.c (main_1): Correct a spelling here in passing.
 * event-Xt.c (x_reset_modifier_mapping):
 Use PRAGMA_IGNORE_DEPRECATED when calling XKeycodeToKeysym(),
 motivation already documented.
 * fontcolor-xlike-inc.c (XFUN (font_spec_matches_charset)):
 Remove some unused variables, quiet a GCC-15 compiler warning.
 
 * lisp.h:
 * lisp.h (XGCPRO1, XGCPRO2, XGCPRO3, XGCPRO4, XGCPRO4):
 Implement all these in terms of XGCPRON_ARRAY(), which is simpler.
 * lisp.h (XGCPRO1_ARRAY): Implement this as a do {} while (0)
 block rather than a statement with repeated commas, since the
 latter does not work with PRAGMA_{PUSH,POP}_DIAGNOSTICS() and
 PRAGMA_IGNORE_DANGLING_POINTER() on GCC.
 Use those pragmas, the entire point of these macros is storing a
 stack address in a global variable, there is no other way to
 address this.
 * lisp.h (XGCPRO2_ARRAY): Ditto.
 * lisp.h (XGCPRO3_ARRAY): Ditto.
 * lisp.h (XGCPRO4_ARRAY): New, ditto.
 * lisp.h (XGCPRO5_ARRAY): New, ditto.
 * lread.c (locate_file_map_suffixes):
 Use emacs_snprintf() within this function for the sake of its
 bounds checking and avoiding GCC-15 warnings about strncpy(), 
 * realpath.c (qxe_realpath):
 Use memcpy() rather than strncpy here. No need for a memset(),
 since the existing code does not handle strncpy() inserting
 nulls.
 * regex.c (EXTEND_BUFFER):
 Avoid use after free warnings regarding OLD_BUFFER here (which are
 only likely to be an issue with a developer-hostile and
 standards-obsessed optimizing compiler, since it is not
 dereferenced), make it a size_t, and calculate a delta once when
 adjusting BUF_END, BEGALT, FIXUP_ALT_JUMP, LASTSTART, PENDING_EXACT.
 * search.c (looking_at_1):
 Pass the buffer's syntax cache explicitly to re_match_2() here,
 which setup_syntax_cache() within regex.c was going to pass back
 anyway.
 * search.c (search_buffer):
 Ditto.
 * syntax.c (setup_syntax_cache):
 Never accept NULL as a CACHE argument, it must either be OBJECT's
 syntax cache when OBJECT is a buffer, or valid pointer
 otherwise. Add an assertion regarding the former.
 * syntax.c (setup_buffer_syntax_cache):
 Pass BUFFER->SYNTAX_CACHE to setup_syntax_cache() rather than
 NULL, quiet a GCC-15 warning.
 * text.c (new_dfc_convert_malloc): Initialize DST to NULL, quiet a
 GCC-15 warning.
2025年06月05日 Alan Mackenzie <acm@muc.de>
 Purge the PACKAGE_SUPPRESS mechanism from XEmacs.
 * lread.c (Vload_suppress_alist): Removed.
 * lread.c (check_if_suppressed): Removed.
 * lread.c: (locate_file_in_directory_mapper): No longer call
 check_if_suppressed.
2025年06月04日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c (static detection_state_description_stynarr
 detection_state_description): Remove the static initialization of
 this, which was buggy, let C put it in BSS as all zeroes.
 * file-coding.c (coding_system_type_create):
 Call Stynarr_init on detection_state_description, avoiding this
 bug. Add the XD_END entry here.
2025年06月03日 Alan Mackenzie <acm@muc.de>
 * regex.c (re_match_2_internal): Correct the updating of the
 syntax cache so that it is current for the characters actually
 being read and compared. Done in case wordbound:, case wordend:,
 case symend:.
2025年06月03日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c (initialize_detector_description):
 Correct an offset in the created description, make the generated
 description identical to that previous to 466eb98833cc .
 I am not managing to create a test case for this, frustratingly.
2025年06月02日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c (look_for_coding_cookie_last_page):
 This function appears to cause intermittent crashes (with
 corruption of the stack) on GCC-15 with
 optimization. #ifdef 0 it for the moment.
 * file-coding.c (Ffind_coding_system_magic_cookie_in_file):
 #ifdef 0 a call to it here.
 * file-coding.c (determine_real_coding_system):
 Ditto. 
2025年06月01日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in: Suppress the touch(1) calls in the make output
 when XEmacs is built.
2025年06月01日 Aidan Kehoe <kehoea@parhasard.net>
 * emacs.c (main_1):
 Remove call to reinit_coding_system_type_create_mule_coding(), no
 longer needed.
 * file-coding.c (coding_detector_description_lines_count):
 Removed, no longer needed.
 * file-coding.c (static detection_state_description_stynarr
 detection_state_description): New.
 * file-coding.c (static const struct sized_memory_description
 detection_state_description_elt_description): New.
 * file-coding.c (static const struct sized_memory_description
 memory_description_dynarr_description): New.
 * file-coding.c (initialize_detector_description): New, now a C
 function rather than a macro in file-coding.h, with (currently
 theoretical) handling for detectors from modules.
 * file-coding.c (detection_state_description): This is now a
 Stynarr that is dumped and doesn't need any post pdump_load()
 initialization.
 * file-coding.c (syms_of_file_coding):
 Use detection_state_description.els_static for the memory
 description of struct detection_state.
 * file-coding.c (coding_system_type_create):
 Dump detection_state_description using its new memory
 description.
 * file-coding.h (DETECTOR_DESCRIPTION_OFFSET): Removed, now
 incorporated into initialize_detector_description().
 * file-coding.h: Remove declarations for
 coding_detector_description_lines_count,
 detection_state_description, no longer needed.
 * file-coding.h (INITIALIZE_DETECTOR_WITH_DESCRIPTION):
 Call initialize_detector_description() here rather than using a
 macro.
 * mule-coding.c (reinit_coding_system_type_create_mule_coding):
 Removed, no longer needed.
 * symsinit.h:
 Remove its declaration.
2025年05月26日 Aidan Kehoe <kehoea@parhasard.net>
 Remove support for static linking of postgresql, canna and ldap
 into the XEmacs binary if !HAVE_SHLIB, since that is very rare
 these days, the relevant code is not regularly tested, and it
 complicates development of the code generally.
 * Makefile.in.in:
 * Makefile.in.in (ldap_objs): Removed.
 * Makefile.in.in (mule_canna_objs): Removed.
 * Makefile.in.in (postgresql_objs): Removed.
 * Makefile.in.in (shlib_objs): Add emodules.o to this for
 consistency, avoid linking it into temacs if !HAVE_SHLIB.
 * Makefile.in.in (objs): Update this to no longer reference
 $ldap_objs and friends.
 * emacs.c (main_1):
 No longer call syms_of_canna_api(), syms_of_eldap(),
 syms_of_postgresql(), vars_of_canna_api(), vars_of_eldap(),
 vars_of_postgresql(), init_postgresql_from_environment().
 * emodules.c:
 Remove an #ifdef HAVE_SHLIB ... #endif from this file, now
 addressed in Makefile.in.in.
 * emodules.c (make_module):
 Change the name of an argument that shadows a global in this in
 passing, suppress a compiler warning.
 * inline.c:
 Remove code that checked whether ldap, postgresql were being
 linked into temacs, no longer supported.
 * lrecord.h (enum lrecord_type):
 Ditto.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 Fix crashes after unloading modules, by keeping note of those
 subrs and DEFVAR_() created by each module in a weak list, and
 setting what had been pointers into the data segment of the
 unloaded module to values that will not crash XEmacs after
 unload.
 To this end, struct Lisp_Module becomes a full, new Lisp_Object;
 the list of loaded modules becomes just a Lisp list.
 Revise emodules_load() to use emacs_snprintf() rather than the
 prone-to-buffer-overruns strcpy(), strcat().
 * .gdbinit.in.in (lrecord_type_module): Add an entry for this.
 * alloc.c:
 * alloc.c (define_lisp_object):
 Change the LOADHIST_ATTACH() here to store the lrecord_type as an
 integer, avoiding (theoretical) issues with duplicate names.
 * emodules.c:
 * emodules.c (struct Lisp_Module):
 * emodules.c (make_module):
 * emodules.c (find_module):
 * emodules.c (add_module_loadhist_elt): New.
 * emodules.c (static Fixnum deadbeef_constant): New.
 * emodules.c (static Boolint deadbeef_boolint): New.
 * emodules.c (attempt_module_delete):
 * emodules.c (module_load_unwind):
 * emodules.c (emodules_load):
 * emodules.c (emodules_doc):
 * emodules.c (Fload_module):
 * emodules.c (Funload_module):
 * emodules.c (Flist_modules):
 * emodules.c (syms_of_module):
 * emodules.c (vars_of_module):
 Extensive changes as above. Reformat comments to fit with the rest
 of the C code.
 * lisp.h:
 Make Qfile_system_ignore_case_p available here, now it is used in
 emodules.c.
 Remove unloading_module, no longer used.
 Declare emodules_depth, add_module_loadhist_elt() here, now used
 in LOADHIST_ATTACH().
 * lisp.h (LOADHIST_ATTACH):
 Call add_module_loadhist_elt() if currently loading a module.
 * lrecord.h (enum lrecord_type):
 Add an entry for lrecord_type_module.
 * symbols.c (symbol_is_constant):
 Change the return type of this to be Boolint.
 * symbols.c (reject_constant_symbols):
 Revise this to avoid rejection of non-dumped SYMBOL_VALUE_MAGIC
 objects, a simpler way of allowing making variables from modules
 unbound while rejecting dumped SYMBOL_VALUE_MAGIC objects.
 * symbols.c (Fset):
 Delegate freeing the lcrecords to emodules.c.
 * symbols.c (defsymbol_massage_name_1):
 Do a LOADHIST_ATTACH if calling this function after dumping, which
 indicates we are being called from a module.
 * symbols.c (defsymbol_nodump):
 Ditto.
 * symbols.c (defsymbol):
 No longer call make_string_nocopy() here, that added no value.
 * symbols.c (defsubr_1):
 * symbols.c (defsubr):
 Move LOADHIST_ATTACH to this and to the following from
 defsubr_1().
 * symbols.c (defsubr_macro):
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * emodules.c (Qmodule_string_coding_system): New variable, a
 coding system reflecting the encoding of symbol names and
 docstrings in the module currently being loaded.
 * emodules.c (module_load_unwind_coding): unwind-protect function
 to reset this on failure of loading the current module.
 * emodules.c (emodules_load):
 Check for emodule_coding as a symbol, error and fail on loading a
 module if this is not encountered.
 Set up the unwind-protect.
 Define a coding system alias reflecting the encountered
 emodule_coding.
 * emodules.c (emodules_doc):
 * emodules.c (emodules_doc_subr):
 * emodules.c (emodules_doc_sym):
 No longer taken an explicit CODING_SYSTEM_NAME argument in these
 functions.
 * emodules.c (syms_of_module):
 Do a DEFSYMBOL() for Qmodule_string_coding_system.
 * emodules.h:
 Update declaration of emodules_doc_subr(), emodules_doc_sym().
 * lisp.h:
 Make Qmodule_string_coding_system available here.
 * symbols.c (defsubr_1):
 Use it.
 * symbols.c (defvar_magic):
 Use it.
 * text.h:
 Remove the old Qemodule_string_encoding here.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * symeval.h (XSYMBOL_VALUE_FORWARD_OBJECT_MAGICFUN):
 Correct a typo in this macro.
2025年05月25日 Aidan Kehoe <kehoea@parhasard.net>
 * elhash.c (hash_table_test_validate):
 * elhash.c (decode_hash_table_test):
 * elhash.c (Fdefine_hash_table_test):
 * elhash.c (Fvalid_hash_table_test_p):
 * elhash.c (vars_of_elhash):
 Use assq_no_quit() here when dealing with elements of
 Vhash_table_test_weak_list in passing, since we know that is a
 valid internal-format list.
 * eval.c (Fmacroexpand):
 Call FassocX here, now Fassoc no longer available.
 * fontcolor-msw.c (font_enum_callback_2):
 Call assoc_no_quit() here, since we know font_enum->list is a
 valid internal-format list.
 * glyphs-gtk.c:
 * glyphs-gtk.c (cursor_name_to_index):
 Call Fassq() here, since we're looking for a symbol. Check the
 type of the result before calling Fcdr(), XFIXNUM().
 * lisp.h:
 Remove declaration for Fassoc() here. Add declaration for FassocX().
 * lread.c (Fload_internal):
 Use the implementation of Fassoc() when examining Vafter_load_alist.
 * select.c (Fselection_owner_p):
 We know Vselection_alist is a valid internal-format list, use
 assq_no_quit() when examining it.
 * sequence.c (Fassoc): Move to subr.el.
 * sequence.c (syms_of_sequence): Remove its DEFSUBR().
2025年05月24日 Alan Mackenzie <acm@muc.de>
 Make "\\_<" and "\\_>" work in regexp buffer searches.
 * search.c (trivial_regexp_p):
 Recognize "\\_" as a non-trivial sequence, so that C-M-s won't
 move to the next literal "_" with it.
2025年05月24日 Aidan Kehoe <kehoea@parhasard.net>
 * callint.c (Finteractive):
 Document the result of byte-compiling a list form here, too,
 already done in the docstring for
 #'compiled-function-interactive.
2025年05月19日 Alan Mackenzie <acm@muc.de>
 Prevent scan_sexps_forward interpreting very large argument as -1.
 * src/syntax.c (scan_sexps_forward):
 Change the type of parameter TARGETDEPTH from int to EMACS_INT
 so that the default argument from Fparse_partial_sexp,
 MOST_NEGATIVE_FIXNUM - 1, won't be wrongly converted to -1.
2025年05月19日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in:
 * Makefile.in.in ($(RAW_EXE)):
 NetBSD dd(1) does not do what Linux and friends do with seek=N
 count=0 where N is greater than the current file size, make sure
 that at least one byte is written, fixing the NetBSD build. Thank
 you Hauke Fath!
2025年05月12日 Aidan Kehoe <kehoea@parhasard.net>
 Sigh, I had known but did not document that making a separate rule
 for dump-data.o in Makefile.in.in failed with -flto, and so my
 last change provokes that failure. Revert the separate rule,
 incorporate it into the rule for temacs, document it this time
 around. 
 * Makefile.in.in (dump-data.o): Removed.
 * Makefile.in.in: Remove its entry in otherobjs.
 * Makefile.in.in ($(RAW_EXE)): Build it without an explicit rule
 when building temacs.
 * Makefile.in.in ($(PROGNAME)): Build dump-data.o without an
 explicit rule when building xemacs.
2025年05月11日 Aidan Kehoe <kehoea@parhasard.net>
 Correct dependency checks --with-dump-in-exec, avoid make(1)
 rebuilding temacs and xemacs all the time for no reason.
 * Makefile.in.in:
 * Makefile.in.in ($(LIB_SRC)/make-dump-id): Make this dependent on
 $(LIB_SRC)/make-dump-id.c so the recursive make is not called all
 the time.
 * Makefile.in.in (dump-data.o): New. Explicit rule for this,
 rather than subsuming it into that for $(RAW_EXE).
 * Makefile.in.in (@DUMP_FILE_NAME@): Explicit rule for this when
 DUMP_IN_EXEC, dependent on $(RAW_EXE), $(BLDSRC)/NEEDTODUMP,
 $(LIB_SRC)/DOC.
 * Makefile.in.in (dump-size): New. Explicit rule for this, with a
 dependency on @DUMP_FILE_NAME@.
 * Makefile.in.in (dump-size-correct): New. Rule that succeeds if
 the size of the dump file known at the time temacs was built is
 the same as the current dump file.
 * Makefile.in.in ($(PROGNAME)): New. Dependent on
 dump-size-correct, rebuilds dump-data.o and links the object files
 in the same way as for temacs, then mungs modification times with
 touch(1) to avoid needless rebuilding.
 * Makefile.in.in (mostlyclean):
 Add temacs-dump-size, dump-size-correct to the files removed here.
 * emacs.c:
 * emacs.c (Femacs_run_status):
 New entry to the plist returned, Qdump_in_exec, allowing
 update-elc.el to work out which file to check for dependency
 correctly.
 * emacs.c (syms_of_emacs):
 Call DEFSYMBOL() on Qdump_in_exec.
 * s/win32-native.h (DUMP_IN_EXEC):
 Document that we always dump into the exec file on windows native,
 for the sake of Femacs_run_status().
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c:
 * file-coding.c (LENGTH):
 Cast the result of this macro to Bytecount, which works better
 with new uses in this file and is reasonable in the general
 sense.
 * file-coding.c (look_for_coding_cookie_first_page): New, more
 accurate, name for look_for_coding_system_magic_cookie().
 * file-coding.c (look_for_coding_cookie_last_page): New. Examine
 any Local Variables: blocks at the end of the file for a coding
 cookie.
 * file-coding.c (Ffind_coding_system_magic_cookie_in_file):
 Revise docstring extensively.
 Revise to use look_for_coding_cookie_last_page() in addition to
 examining the beginning of a file for a coding cookie.
 * file-coding.c (determine_real_coding_system):
 Use look_for_coding_cookie_last_page here.
 * file-coding.c (undecided_decode):
 Use look_for_coding_cookie_first_page()'s new name here. Don't
 call look_for_coding_cookie_last_page(), this is not a seekable
 stream.
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 Clean-ups of file-coding.c and fileio.c in anticipation of
 supporting coding cookies on the last page.
 1. Make Vdebug_coding_detection into a Boolint called
 debug_coding_detection, and declare the related Lisp-visible
 variable with DEFVAR_BOOL.
 2. Add debug_out_no_conversion, which uses
 write_external_fmt_string_va() with Qno_conversion to deal with
 non-internal format text.
 3. Remove QScoding_system_cookie, no longer used.
 4. Fix some indentation in coding_system_methods_description_1.
 5. Correct a docstring for the Qconvert_eol_crlf coding system.
 6. Fix a couple of calls to debug_out_lisp() that used the old
 (pre e0c08299251d8ce9 ) convention of supplying NARGS, only used
 when Vdebug_coding_detection was non-nil. 
 * file-coding.c: Change the type, name of
 Vdebug_coding_detection.
 * file-coding.c (debug_out_no_conversion): New function.
 * file-coding.c (DEBUG_DETECTION): New macro.
 * file-coding.c (detect_coding_type): Use it.
 * file-coding.c (Fset_coding_priority_list): Use the new name for
 debug_coding_detection.
 * fileio.c (Fwrite_region_internal): Correct calls to
 debug_out_lisp(). Use the new name for debug_coding_detection.
 * fileio.c (Finsert_file_contents_internal): Ditto.
 * file-coding.h:
 Update declaration of debug_coding_detection.
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 Add a seek_from_end() Lstream method, needed in the bowels of
 coding detection to allow examination of coding cookies on the
 last page.
 * lstream.c:
 Add an entry for the method to the lstream implementation memory
 description.
 * lstream.c (Lstream_seek_from_end): New. Call the seek_from_end()
 method on an Lstream, returning 1 if successful, 0 otherwise.
 * lstream.c (stdio_seek_from_end): New. Implement this method for
 stdio streams.
 * lstream.c (struct filedesc_stream): Change the types of
 STARTING_POS, CURRENT_POS, END_POS to OFF_T in passing. Previous
 type was int, also signed, and they do not escape from outside
 this file, so unlikely to have any effect beyond supporting large
 values for the OFFSET arg to make_filedesc_stream_1().
 * lstream.c (filedesc_seek_from_end): New. Implement this method
 for filedesc streams.
 * lstream.c (vars_of_lstream): Document that the implementations
 have these methods.
 * lstream.h:
 Update comment.
 * lstream.h (lstream_implementation):
 Add a slot for the seek_from_end() method.
 Declare Lstream_seek_from_end().
2025年05月07日 Aidan Kehoe <kehoea@parhasard.net>
 Add support for \_<, \_> to regex.c, anchoring at a symbol begin
 and a symbol end. Thank you Alan Mackenzie.
 * regex.c (Ssymbol): New syntax code for the non-emacs
 compilation. 
 * regex.c (init_syntax_once):
 Initialize re_syntax_table using it in the same way as for Sword.
 * regex.c (enum):
 New values, symbeg, symend.
 * regex.c (print_partial_compiled_pattern):
 Print them.
 * regex.c (optimize_on_failure_jump):
 Basic handling for them in this function; support for them still
 to be added to mutually_exclusive_p().
 * regex.c (regex_compile):
 Interpret \_<, \_> them in the pattern to be compiled.
 * regex.c (re_compile_fastmap):
 Handle them in the same way as wordbeg, wordend here (although
 this is unsatisfactory).
 * regex.c (re_match_2_internal):
 Implement them when matching, logic the same as that of GNU.
 * regex.c (common_op_match_null_string_p):
 Handle them the same as wordbeg, wordend here; they are
 zero-length assertions so they can match the null string.
2025年05月04日 Aidan Kehoe <kehoea@parhasard.net>
 Maintenance on elhash.c.
 1. Calling check_hash_table_invariants() on every XHASH_TABLE()
 with ERROR_CHECK_STRUCTURES defined is unreasonably expensive for
 use of the hash tables from C. Turn this off unless a new
 SLEDGEHAMMER_CHECK_HASH_TABLES constant is defined.
 2. Update the hash_table_equal_function_t typedef to describe a
 function returning a Boolint.
 3. Fix some indentation, remove an enum that is no longer used,
 elhash.h.
 * elhash.c (check_hash_table_invariants):
 Wrap in a new #define.
 * elhash.c (lisp_object_eql_equal): Update type for this.
 * elhash.c (lisp_object_equal_equal): Ditto.
 * elhash.c (lisp_object_equalp_equal): Ditto.
 * elhash.c (lisp_object_general_equal): Ditto.
 * elhash.c (xhash_table): Wrap with
 SLEDGEHAMMER_CHECK_HASH_TABLES. No longer check for gc_in_progress
 which never made any sense. #define XHASH_TABLE to xhash_table if
 SLEDGEHAMMER_CHECK_HASH_TABLES is #defined.
 * elhash.c (Fcopy_hash_table):
 Use CHECK_HASH_TABLE() + XHASH_TABLE() rather than xhash_table()
 here.
 * elhash.c (pdump_reorganize_hash_table):
 Use XHASH_TABLE() rather than xhash_table() here.
 * elhash.c (Fgethash):
 Use CHECK_HASH_TABLE() + XHASH_TABLE() rather than xhash_table()
 here.
 * elhash.c (Fputhash):
 * elhash.c (Fremhash):
 * elhash.c (Fclrhash):
 * elhash.c (Fhash_table_count):
 * elhash.c (Fhash_table_size):
 * elhash.c (Fhash_table_rehash_size):
 * elhash.c (Fhash_table_rehash_threshold):
 * elhash.c (Fhash_table_weakness):
 * elhash.c (Fhash_table_type):
 * elhash.c (Fmaphash):
 * elhash.c (elisp_maphash_unsafe):
 * elhash.c (elisp_maphash):
 * elhash.c (elisp_map_remhash):
 Ditto for all the above functions.
 * elhash.h:
 Minor changes here.
 * gccache-x.c (gc_cache_eql): Update type here. 
 * glyphs.c (instantiator_eq_equal): Update type here.
2025年05月03日 Aidan Kehoe <kehoea@parhasard.net>
 * elhash.c:
 * elhash.c (HASHCODE): Modify this to compare HTTP against
 Veq_hash_table_test, rather than HT->test, needed for other
 changes today.
 * elhash.c (LINEAR_PROBING_LOOP):
 * elhash.c (KEYS_EQUAL_P): Removed. More appropriate to do the
 constant comparison to Veq_hash_table_test outside of the loops
 this is called from.
 * elhash.c (choose_hash_table_test_for_lookup): New.
 Do the type-based optimization of comparisons that sequence.c has
 done for years now, attempting to use Veq_hash_table_test for
 lookup depending on the type of KEY.
 * elhash.c (find_htentry): Use it.
2025年04月27日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h (PARSE_KEYWORDS_EXPAND): New. Just expand to its
 argument, used in working around an MSVC bug in processing
 __VA_ARGS__.
 * lisp.h (PARSE_KEYWORDS_ARGC): Use it, get recent changes working
 under MSVC.
2025年04月28日 Aidan Kehoe <kehoea@parhasard.net>
 * redisplay.c (decode_mode_spec):
 Handle the %t spec properly once more, despite that it is now
 usually irrelevant.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 New macros, SET_C_READONLY(), CLEAR_C_READONLY(), encapsulate
 access to an object's lrecord_header.
 * lrecord.h (SET_C_READONLY): New. Call
 SET_C_READONLY_RECORD_HEADER() on the header of a Lisp_Object.
 * lrecord.h (CLEAR_C_READONLY): New, for symmetry. Call
 CLEAR_C_READONLY_RECORD_HEADER on the header of a Lisp_Object.
 * lrecord.h (SET_LISP_READONLY_RECORD_HEADER) Move this a little
 later for clarity.
 * alloc.c (old_alloc_sized_lcrecord_1):
 Use SET_C_READONLY().
 * alloc.c (make_string_nocopy): Ditto.
 No need for SET_LISP_READONLY(), that is implicit in
 SET_C_READONLY().
 * alloc.c (mark_subrs_readonly):
 Use SET_C_READONLY().
 * opaque.c (init_opaque_once_early):
 Ditto.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * backtrace.h (SPECBIND):
 * backtrace.h (SPECBIND_FAST_UNSAFE):
 * backtrace.h (FSET_FAST_UNSAFE):
 (!SYMBOL_VALUE_MAGIC_P (X) || UNBOUNDP (X)) is now equivalent to
 !SYMBOL_VALUE_MAGIC_P(X), make this change in these macros, missed
 in 71db57be985b.
 * lisp.h (UNBOUNDP): Update documentation of this and Qunbound.
 * opaque.c:
 Remove declaration of Vopaque_ptr_free_list, no longer needed.
 * opaque.c (init_opaque_once_early):
 Set Qunbound as C-readonly, so it is not traced for GC, important
 for the many symbols that are #'fboundp and not #'boundp or
 vice-versa.
 Make the dumper aware of it but do not add it to STATICPROS.
 Both these things were the case pre-71db57be985b.
 Since it is now heap data it does now need a staticpro_nodump(),
 do this.
 * symbols.c:
 Correct comments here.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c:
 Update the documentation regarding the (ongoing) need to GCPRO all
 strings, and the need to re-fetch the string data after every call
 to Lisp.
 
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * callint.c (Finteractive):
 Update the documentation of the Lisp expression equivalent to the
 ?c code letter in the documentation of this.
2025年04月26日 Aidan Kehoe <kehoea@parhasard.net>
 * xemacs.def.in.in:
 Update this file to reflect recent changes, get the C-only build
 working on Cygwin (the C++ build still fails regarding symbols in
 terminfo, still working on working around this).
2025年04月22日 Aidan Kehoe <kehoea@parhasard.net>
 * dumper.c (pdump):
 1. GCPRO Vstaticpros_nodump_block_offsets, motivation is the same
 as that for Vstaticpros_hash.
 2. Move the alert giving the undumpable types list after
 STATICPROS has been processed, given the bulk of Lisp_Objects are
 now reached from there.
2025年04月21日 Aidan Kehoe <kehoea@parhasard.net>
 REINITIALIZE_DETECTOR_WITH_DESCRIPTION() needs to be done post
 pdump_load(), restore that.
 * emacs.c (main_1):
 Call reinit_coding_system_type_create_mule_coding() once more.
 * file-coding.c (coding_system_type_create):
 Document that I would like to dump_add_root_block
 (detection_state_description ...).
 * mule-coding.c:
 * mule-coding.c (reinit_coding_system_type_create_mule_coding):
 Restore this.
 * symsinit.h:
 Restore its declaration.
2025年04月20日 Aidan Kehoe <kehoea@parhasard.net>
 * lstream.c (vars_of_lstream):
 Certain C implementations are anal about the restrictions on the
 complexity of initialization of static variables, even when those
 static variables have function scope. Work around that in this
 function, thank you Mats Lidell and the buildbot.
2025年04月20日 Aidan Kehoe <kehoea@parhasard.net>
 My first commit of the support for heap staticpros was buggy, fix
 that.
 * lrecord.h:
 * lrecord.h (enum memory_description_type):
 New entry, XD_BLOCK_OFFSET_PTR, needed to properly support
 staticpro() on the heap. Describes a pointer to an offset into a
 block, which block has been encountered elsewhere and so does not
 need to be dumped.
 * alloc.c (staticpro): Update and correct comments regarding
 staticpro() and heap objects.
 * dumper.c:
 Correct documentation of the process for working out if addresses
 in STATICPROS are in the heap.
 * dumper.c (static int pdump_min_shuffle_depth): New. Depth
 threshold checked at the registration stage to allow decisions to
 be made about whether pointers encountered should be moved from
 STATICPROS to STATICPROS_NODUMP.
 * dumper.c (shuffle_staticpros_if_needed):
 Respect it. Use find_htentry() rather than Fgethash() for reasons
 of speed.
 Take the offset within the current block as an argument, to allow
 the block to be found and to avoid dumping another block.
 * dumper.c (pdump_register_sub):
 Pass the offset of the current Lisp_Object to
 shuffle_staticpros_if_needed(). Handle XD_BLOCK_OFFSET_PTR.
 * dumper.c (pdump_store_new_pointer_offsets):
 Handle XD_BLOCK_OFFSET_PTR here, pull the offset saved from
 Vstaticpros_nodump_block_offsets, find the corresponding block,
 and store the save_offset of the block plus the offset from the
 hash table as *RDATA.
 * dumper.c (pdump_reloc_one):
 Handle XD_BLOCK_OFFSET_PTR in the same way as XD_BLOCK_PTR here.
 * dumper.c (pdump):
 Initialize Vstaticpros_nodump_block_offsets as a hash table. Set
 pdump_min_shuffle_depth appropriately to limit shuffling from
 STATICPROS to STATICPROS_NODUMP, for root blocks and for
 STATICPRO, STATICPRO_NODUMP.
 * gc.c (lispdesc_one_description_line_size):
 * gc.c (kkcc_marking): 
 Handle XD_BLOCK_OFFSET_PTR in the same way as XD_BLOCK_PTR, not
 that it will come up.
2025年04月19日 Aidan Kehoe <kehoea@parhasard.net>
 Remove the qsort() of STATICPROS of the last commit, it slows down
 the GC slightly, the loss of speed at pdump() time doesn't matter,
 and less code is more maintainable than more code.
 Update some comments related to that.
 Update a comment here.
 * alloc.c (compare_staticpros): Removed, no longer needed.
 * dumper.c:
 * dumper.c (pdump_load_lispdesc_indirect_description):
 Update a comment for this.
 * dumper.c (pdump):
 Remove the qsort(). Update some comments.
 * lrecord.h:
 Correct a comment here in passing.
2025年04月19日 Aidan Kehoe <kehoea@parhasard.net>
 Handle heap addresses known to the dumper when these are passed to
 staticpro().
 Remove several functions and macros that only existed to work
 around the fact that staticpro() couldn't deal with heap
 addresses.
 * alloc.c (static const struct sized_memory_description
 staticpro_description): Moved to dumper.c.
 * alloc.c (static const struct sized_memory_description
 staticpros_description): Moved to dumper.c.
 * alloc.c (staticpro): Update a comment describing this.
 * alloc.c (staticpro_nodump): Update a comment describing this. 
 * alloc.c (common_init_alloc_early): Move initialization of
 staticpros_nodump from here to init_alloc_once_early().
 * alloc.c (init_alloc_once_early):
 * console-gtk.c:
 * console-gtk.c (reinit_console_type_create_gtk): Removed, no
 longer needed. Add a comment to mark end of file.
 * console-impl.h:
 * console-impl.h (INITIALIZE_CONSOLE_TYPE): Use defsymbol() rather
 than defsymbol_nodump() here.
 * console-impl.h (REINITIALIZE_CONSOLE_TYPE): Removed, no longer
 needed.
 * console-msw.c (reinit_console_type_create_mswindows): Removed,
 no longer needed.
 * console-tty.c (reinit_console_type_create_stream): Removed, no
 longer needed.
 * console-x.c (reinit_console_type_create_tty): Ditto.
 * dumper.c: Update copyright.
 * dumper.c (static const struct sized_memory_description
 staticpro_description):
 * dumper.c (static const struct sized_memory_description
 staticpros_description): Move these here from alloc.c.
 * dumper.c (static const struct sized_memory_description
 staticpro_nodump_description): New. 
 * dumper.c (static const struct sized_memory_description
 staticpros_nodump_description): New. Used for dumping
 STATICPROS_NODUMP, which reflects those heap entries in
 STATICPROS.
 Lengthy comments on both.
 * dumper.c (pdump_backtrace):
 Fix a format string in passing.
 * dumper.c (Vstaticpros_hash): New. A Lisp hash table used at dump
 time to check whether the addresses of heap Lisp_Objects are in
 STATICPROS.
 * dumper.c (compare_staticpros): New. Used to sort STATICPROS at
 dump time, which will make partitioning easier.
 * dumper.c (shuffle_staticpros_if_needed): New. If POBJ, the
 address of a Lisp_Object in the heap, is in Vstaticpros_hash, add
 it to STATICPROS_NODUMP, and remove it from STATICPROS,
 Vstaticpros_hash.
 * dumper.c (pdump_register_sub): Use it.
 * dumper.c (save_staticpros): New. Return an alist reflecting the
 address of STATICPROS and STATICPROS_NODUMP, and the existing
 objects pointed to in those arrays,
 * dumper.c (restore_staticpros): New. An unwind_protect that
 restores STATICPROS and STATICPROS_NODUMP following the dumper's
 modification of them.
 * dumper.c (pdump):
 Use them. Sort STATICPROS before registering objects for
 dump. Initialize Vstaticpros_hash to reflect all those addresses
 in STATICPROS.
 Handle STATICPROS and STATICPROS_NODUMP specially, after
 everything else has been registered. Clear Vstaticpros_hash before
 registering them so no shuffling takes place.
 
 * emacs.c (main_1):
 Call reinit_vars_of_lstream(), just re-introducted.
 Remove calls to other reinit_.*_type_create() functions, no longer
 needed.
 * file-coding.c (reinit_coding_system_type_create): Removed, no
 longer needed.
 * file-coding.h:
 * file-coding.h (INITIALIZE_CODING_SYSTEM_TYPE): Call defsymbol(),
 not defsymbol_nodump() on the predicate symbol.
 * file-coding.h (REINITIALIZE_CODING_SYSTEM_TYPE): Removed, no
 longer needed.
 * fontcolor.c (reinit_specifier_type_create_fontcolor): Removed,
 no longer needed.
 * glyphs.c (reinit_specifier_type_create_image): Removed, no
 longer needed.
 * gutter.c (reinit_specifier_type_create_gutter): Removed, no
 longer needed.
 * intl-win32.c (reinit_coding_system_type_create_intl_win32):
 Removed, no longer needed.
 * lstream.c:
 Make Vlstream_free_list into a Lisp_Object allocated in
 vars_of_lstream.
 New Lisp_Object * variable, lstream_free_list, pointing into
 Vlstream_free_list after reinit and pointing into a
 dump-time-specific at dump
 * lstream.c (Lstream_new):
 Use lstream_free_list here rather than Vlstream_free_list. No more
 need to staticpro_nodump().
 * lstream.c (Lstream_delete): Use lstream_free_list_here.
 * lstream.c (vars_of_lstream):
 Create Vdump_time_lstream_free_list here, a static Lisp
 vector. staticpro_nodump() it, make lstream_free_list point into
 it at dump time.
 Initialize Vlstream_free_list here, and staticpro() it.
 * lstream.c (reinit_vars_of_lstream): Restored, all it needs to do
 is set lstream_free_list to the vector data of
 Vlstream_free_list.
 * mule-coding.c (reinit_coding_system_type_create_mule_coding):
 Removed, no longer needed.
 * rangetab.c: Update a comment here in passing (relevant to the
 changes made today).
 * specifier.c (reinit_specifier_type_create): Removed, no longer
 needed.
 * specifier.h (INITIALIZE_SPECIFIER_TYPE): Use defsymbol(), not
 defsymbol_nodump() in this.
 * specifier.h (REINITIALIZE_SPECIFIER_TYPE): Removed, no longer
 needed.
 * symsinit.h: Remove declarations for various functions that have
 been removed.
 * toolbar.c (reinit_specifier_type_create_toolbar): Removed, no
 longer needed.
 * unicode.c (reinit_coding_system_type_create_unicode): Removed,
 no longer needed.
2025年04月14日 Aidan Kehoe <kehoea@parhasard.net>
 Call init_mule_charsets() at dump time after loadup, not after
 restart.
 Also call it from within #'run-emacs-from-temacs.
 Remove init_mule_coding(), which is empty.
 * alloc.c:
 * alloc.c (disksave_object_finalization):
 Update a comment here.
 Call init_mule_charset().
 * emacs.c (main_1):
 Remove calls to init_mule_charset(), init_mule_coding() from here.
 Add a call to init_mule_charset() to Frun_emacs_from_temacs.
 * mule-charset.c (init_mule_charset):
 Update a comment here.
 * mule-coding.c (init_mule_coding): Empty, removed.
 * symsinit.h:
 Remove declaration for init_mule_coding().
2025年04月13日 Aidan Kehoe <kehoea@parhasard.net>
 * inline.c:
 Only #include "../modules/ldap/eldap.h" if !defined (HAVE_SHLIB),
 fixing the C-only build for me. Similarly for the postgresql
 header.
 * lrecord.h:
 * lrecord.h (enum lrecord_type):
 If !defined (HAVE_SHLIB) restore entries for lrecord_type_pgconn,
 lrecord_type_pgresult, lrecord_type_ldap, and make
 DECLARE_MODULE_LISP_OBJECT identical to DECLARE_LISP_OBJECT.
2025年04月13日 Aidan Kehoe <kehoea@parhasard.net>
 Fix further bugs in calls to dump_add_nil_lisp_object(). Assert
 that any addresses pointed to by VARADDRESS are
 non-Qnull_pointer.
 * device.c (vars_of_device):
 Use staticpro_dump_nil on Vdefault_device_plist.
 * dumper.c (dump_add_nil_lisp_object_1):
 Assert that *VARADDRESS is non-Qnull_pointer. Should also be done
 by staticpro(), but that will be a lot more work.
 * editfns.c:
 * editfns.c (vars_of_editfns):
 Call staticpro_dump_nil() on Vsystem_name.
 * emacs.c (vars_of_emacs):
 Initialize Vsystem_type before calling DEFVAR_LISP() on it, avoid
 a crash in early GC.
 * lread.c (vars_of_lread):
 Initialize Vvalues in this function, avoid a crash in early GC.
 * process.c (vars_of_process):
 Initialize Vshell_file_name and Vprocess_environment on the same
 principle.
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 * text.h (extbyte_ascii_p): New inline function.
 * text.h (CHECK_ASCTEXT): New macro.
 * text.h (CHECK_ASCTEXT_LEN): New macro.
 * text.h (ASSERT_ASCTEXT_ASCII_LEN): Use extbyte_ascii_p() within
 this macro.
 * text.c (syms_of_text): New symbol, Qascii_textp;
 * emodules.c (emodules_doc):
 Use CHECK_ASCTEXT() on the supplied coding system name, so we
 error on both debug builds and normal builds rather than crashing
 on debug builds and corrupting internal text on non-debug builds.
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 Fix a bug in dump_add_nil_lisp_object(), I'm uncertain how this
 compiled for me before my last push.
 * dumper.c (dump_add_nil_lisp_object_1): New.
 Previous implementation of dump_add_nil_lisp_object.
 * dumper.c (dump_add_nil_lisp_object): Update this to also call
 dump_add_root_lisp_object() so the object is restored after load.
 * alloc.c:
 * alloc.c (staticpro_dump_nil):
 Use dump_add_nil_lisp_object_1() as is more appropriate for this. 
2025年04月10日 Aidan Kehoe <kehoea@parhasard.net>
 Use staticpro_dump_nil() in much more places, allowing removal of
 27 reinit_vars_of_FILE() functions, simplifying startup.
 In passing rename minibuf_window to Vminibuf_window, pre_gc_cursor
 to Vpre_gc_cursor.
 * buffer.c:
 * buffer.c (Fkill_buffer):
 Use Vminibuf_window's new name here.
 * buffer.c (reinit_vars_of_buffer): Removed.
 Vbuffer_alist is now initialized in vars_of_buffer() and GC
 protected with staticpro_dump_nil(). current_buffer initialized to
 zero by the C implementation.
 * buffer.c (init_vars_of_buffer):
 Initialize and staticpro_dump_nil Vbuffer_alist, Vbuffer_defaults,
 Vbuffer_local_symbols here.
 * buffer.c (common_init_complex_vars_of_buffer):
 Remove staticpro_nodump() for Vbuffer_defaults,
 Vbuffer_local_symbols here.
 * callint.c (Fcall_interactively):
 Use Vminibuf_window's new name here.
 * console-stream.c (init_console_stream):
 Ditto.
 * console.c (reinit_vars_of_console): Removed.
 * console.c (vars_of_console): Vconsole_list, Vselected_console,
 Vconsole_defaults, Vconsole_local_symbols initialized to Qnil and
 GC protected with staticpro_dump_nil() here.
 * console.c (common_init_complex_vars_of_console):
 Rearrange initialization of Vconsole_defaults,
 Vconsole_local_symbols here.
 * device-x.c (reinit_vars_of_device_x): Removed, contents
 delegated to the C implementation.
 * device.c (reinit_vars_of_device): Removed, use
 staticpro_dump_nil on Vdefault device in vars_of_device(),
 asynch_device_change_pending will be initialized to 0 by the C
 implementation.
 * emacs.c (main_1):
 Remove 27 calls to reinit_vars_of_FILE(), simplify startup.
 * emodules.c:
 * emodules.c (reinit_vars_of_module): Removed, contents delegated
 to the C implementation.
 * eval.c (vars_of_eval):
 Use dump_add_nil_lisp_object() on Vdebug_on_error and friends.
 * event-Xt.c (reinit_vars_of_event_Xt): Empty, removed.
 * event-gtk.c (reinit_vars_of_event_gtk): Empty, removed.
 * event-msw.c (reinit_vars_of_event_mswindows): Empty, removed.
 * event-stream.c (Fdispatch_event):
 Use Vminibuf_window's new name.
 * event-tty.c (vars_of_event_tty): Empty, removed.
 * events.c (reinit_vars_of_events): Move initialization of
 Vevent_resource to vars_of_events(), use
 dump_add_nil_lisp_object() on it.
 * file-coding.c (reinit_vars_of_file_coding): Empty, removed.
 * font-lock.c (reinit_vars_of_font_lock): Removed, contents
 delegated to the C implementation.
 * fontcolor.c (reinit_vars_of_fontcolor): Remove staticpro_nodump
 on Vthe_null_color_instance, Vthe_null_font_instance from
 here. Retain other code which cannot be done at dump time.
 * fontcolor.c (vars_of_fontcolor): Use staticpro_dump_nil() on the
 same variables.
 * frame-msw.c (reinit_vars_of_frame_mswindows): Removed.
 * frame-msw.c (vars_of_frame_mswindows):
 Use dump_add_nil_lisp_Object() on Vmswindows_frame_being_created.
 * frame.c (Factive_minibuffer_window):
 Use Vminibuf_window's new name here.
 * frame.c (delete_frame_internal): Ditto.
 * frame.c (Fmake_frame_invisible): Ditto.
 * frame.c (Ficonify_frame): Ditto.
 * gc.c:
 Use Vpre_gc_cursor's new name here.
 * gc.c (show_gc_cursor_and_message): Ditto.
 * gc.c (remove_gc_cursor_and_message): Ditto.
 * gc.c (vars_of_gc): Call staticpro_dump_nil() on Vpre_gc_cursor.
 * glyphs-widget.c (reinit_vars_of_glyphs_widget): Remove, delegate
 its contents to the C implementation.
 * glyphs.c (reinit_vars_of_glyphs): Ditto.
 * gui-x.c:
 * gui-x.c (static LWLIB_ID lwlib_id_tick): Static initialization
 to #x10000.
 * gui-x.c (reinit_vars_of_gui_x): Remove, delegate to the C
 implementation.
 * insdel.c (reinit_vars_of_insdel): Remove, delegate to the C
 implementation.
 * lread.c (init_lread): Remove re-initialization of Vvalues,
 Vload_descriptor_list, Vload_force_doc_string_list,
 Vload_file_name_internal, Vload_file_name from here.
 * lread.c (reinit_vars_of_lread): Removed, use staticpro_dump_nil
 on Vread_buffer_stream in vars_of_lread() instead.
 * lread.c (vars_of_lread):
 Use dump_add_nil_lisp_object(), staticpro_dump_nil() appropriately
 here.
 * menubar-gtk.c (reinit_vars_of_menubar_gtk): Empty, removed.
 * menubar-x.c:
 * menubar-x.c (static LWLIB_ID
 last_popup_menu_selection_callback_id): Initialize statically. 
 * menubar-x.c (reinit_vars_of_menubar_x): Removed, delegate to the
 C implementation. 
 * minibuf.c (read_minibuffer_internal_unwind):
 Use Vminibuf_window's new name.
 * minibuf.c (reinit_vars_of_minibuf): Removed, delegate to the C
 implementation.
 * minibuf.c (vars_of_minibuf): Use staticpro_dump_nil() on
 Vminibuffer_zero, Vecho_area_buffer.
 * minibuf.c (reinit_complex_vars_of_minibuf):
 Remove staticpro_nodump() for those variables.
 * mule-coding.c (reinit_vars_of_mule_coding): Empty, removed.
 * mule-wnnfns.c (reinit_vars_of_mule_wnn):
 Delegate initialization of some static variables to zero to the C
 implementation.
 * print.c (reinit_vars_of_print): Removed, delegate to the C
 implementation.
 * scrollbar-x.c:
 * scrollbar-x.c (int stupid_vertical_scrollbar_drag_hack): Static
 initialization to 1.
 * scrollbar-x.c (reinit_vars_of_scrollbar_x): Delegate to the C
 implementation.
 * select-x.c (reinit_vars_of_select_x): Removed, delegate to the C
 implementation.
 * symsinit.h:
 Remove declarations for various reinit_vars_of_FILE() functions.
 * undo.c (reinit_vars_of_undo): Removed, delegate to the C
 implementation.
 * window-impl.h:
 Use Vminibuf_window's new name.
 * window.c:
 Ditto.
 * window.c (Fnext_window): Ditto.
 * window.c (Fprevious_window): Ditto.
 * window.c (reinit_vars_of_window): Removed.
 * window.c (vars_of_window):
 staticpro_dump_nil (&Vminibuf_window) here.
 * window.h: Use Vwinibuf_window's new name here.
2025年04月09日 Aidan Kehoe <kehoea@parhasard.net>
 Add dump_add_nil_lisp_object(), staticpro_dump_nil(), telling the
 dumper that a given Lisp_Object in the data segment should be
 initialized to Qnil after pdump_load() irrespective of its value
 at dump time.
 * alloc.c:
 * alloc.c (staticpro_dump_nil): New.
 Add VARADDRESS to staticpros and call dump_add_nil_lisp_object()
 on it.
 * alloc.c (disksave_object_finalization): Remove variables from
 this now handled with dump_add_nil_lisp_object().
 * console-stream.c (vars_of_console_stream):
 Call dump_add_nil_lisp_object() on Vterminal_console,
 Vterminal_device, Vterminal_frame.
 * device.c (clear_default_devices):
 Remove Vdefault_device_plist = Qnil from this.
 * device.c (vars_of_device):
 Call dump_add_nil_lisp_object (&Vdefault_device_plist) here.
 * dumper.c (pdump_nil_lisp_objects): New Lisp_Object_ptr_dynarr.
 * dumper.c (dump_add_nil_lisp_object): New.
 Add an entry to pdump_nil_lisp_objects.
 * dumper.c (save_pdump_nil_lisp_objects): New. Return a Lisp vector
 reflecting the current values of those entries in
 pdump_nil_lisp_objects, and set them to Qnil.
 * dumper.c (restore_pdump_nil_lisp_objects): New. Given a Lisp
 vector created by save_pdump_nil_lisp_objects(), restore the saved
 values.
 * dumper.c (pdump):
 Call save_pdump_nil_lisp_objects(), then call
 restore_pdump_nil_lisp_objects() by means of an unwind-protect.
 Remove special-casing of Vterminal_console, Vterminal_frame,
 Vterminal_device.
 * emacs.c:
 Call dump_add_nil_lisp_object() on variables previously reset by
 disksave_object_finalization().
 * lread.c (vars_of_lread): Ditto.
 * process.c (vars_of_process): Ditto.
 * lisp.h:
 Declare staticpro_dump_nil().
 * lrecord.h:
 Declare dump_add_nil_lisp_object().
2025年04月09日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c:
 * alloc.c (staticpro_dump_nil):
 * console-stream.c (vars_of_console_stream):
 * dumper.c:
 * dumper.c (dump_add_nil_lisp_object):
 * dumper.c (save_pdump_nil_lisp_objects):
 * dumper.c (restore_pdump_nil_lisp_objects):
 * dumper.c (pdump):
 * dumper.c (pdump_load_check):
2025年04月09日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c:
 * alloc.c (common_init_alloc_early):
 * alloc.c (init_alloc_once_early):
 * lisp.h:
 * symbols.c (defsymbol_massage_name_1):
 * symbols.c (defsymbol_nodump):
 * symbols.c (defsymbol):
 Remove staticpro_names, staticpro_nodump_names. These interact
 poorly with modules if the value of DEBUG_XEMACS differs between
 the XEmacs binary and the module, and they are less necessary with
 recent GDB which resolves data segment pointers to their symbol
 name automatically.
2025年04月07日 Aidan Kehoe <kehoea@parhasard.net>
 Add define_lisp_object(), undef_lisp_object() for better
 encapsulation of creating new lrecord types.
 * alloc.c:
 * alloc.c (init_memory_usage_stats):
 Update a comment here.
 No longer initialize Vmemusage_stats_list from this function, we
 have some bootstrap-handling within the new define_lisp_object()
 that means it's more appropriate to leave it to
 init_alloc_once_early().
 * alloc.c (uninit_memory_usage_stats): Make this static, now it is
 called from undef_lisp_object().
 * alloc.c (define_lisp_object): New. Do the allocation and
 bare-bones initialization of an entry in
 lrecord_implementations_table, and bootstrap handling of NAME as
 did init_lrecord_implementation_name() previously.
 Call init_memory_usage_stats() from within this function, with the
 same bootstrap handling.
 Add an entry to the load history which will allow better
 integration with the module infrastructure going forward.
 * alloc.c (undef_lisp_object): New. Now a function called from
 UNDEF_MODULE_LISP_OBJECT(), which previously did the bulk of
 this. Be smarter if objects of the type being undefined still
 exist, preserve their names and, if possible, static sizes. Use an
 empty memory description (since the memory description is in
 static data which is unloaded with a module).
 * alloc.c (init_alloc_once_early):
 Initialize Vmemusage_stats_list here, to all zeroes.
 * alloc.c (syms_of_alloc):
 Check for zero values in Vmemusage_stats_list rather than
 Qnull_pointer entries, don't startle the garbage collector.
 * lrecord.h:
 Remove the declaration of uninit_memory_usage_stats() from here,
 now to be called only from undef_lisp_object.
 * lrecord.h (XD_INDIRECT):
 * lrecord.h (MAKE_LISP_OBJECT):
 Revist this to call define_lisp_object().
 * lrecord.h (DECLARE_LISP_OBJECT):
 Revise init_lrecord_type_##c_name() to return the numeric value of
 the lrecord_type, used in the call to define_lisp_object().
 * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT):
 Ditto.
 * lrecord.h (DECLARE_MODULE_LISP_OBJECT):
 Ditto.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 * syntax.c (find_start_of_comment):
 Check that FROM is > 1 before calling prev_bytebpos() on it, avoid
 a crash I've recently elicited.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 Remove the Lisp_Subr structures from the data segment; they are
 copied to the dump file by pdump() anyway, so the data segment
 copies are leaked, and with modules Lisp code access to the data
 segment of unloaded modules ends badly.
 In passing, store the interned symbol as the NAME field, also
 ensuring that it does not point into the data segment of an
 unloaded module. Store PROMPT as a Lisp_Object, either Qnil or a
 string.
 Return the string name of the symbol from #'subr-name, preserving
 what our callers expect. Similar for #'subr-interactive.
 
 * alloc.c:
 * alloc.c (make_subr):
 Remove a comment that is no longer true.
 * alloc.c (mark_subrs_readonly): New. Mark those subrs that
 are bound to interned symbols as C-readonly as was the case
 previous to this change. Mark their interactive specs as
 C-readonly if they are strings.
 * alloc.c (disksave_object_finalization):
 Call it.
 * callint.c (Fcall_interactively):
 Now subr prompt data is stored as a string, treat it the same as
 compiled function prompt data.
 * data.c:
 * data.c (Fsubr_interactive):
 Handle the new data type for Lisp_Subr->prompt.
 * emacs.c (main_1):
 Re-order this, syms_of_eval() now needs to be called before
 anything that calls DEFSUBR().
 * eval.c:
 * eval.c (print_subr):
 Revise this to reflect the new members of Lisp_Subr.
 * eval.c (Fcommandp):
 Ditto.
 * general-slots.h:
 Add Qfunction_min_args, Qfunction_max_args here, used by
 sanity-checking within defsubr().
 * lisp.h:
 * lisp.h (struct Lisp_Subr):
 Revise this to make NAME, PROMPT Lisp_Objects. Re-order it
 following best practice.
 * lisp.h (subr_name):
 Revise this to return the string data of the symbol subr name.
 * lisp.h (DEFUN):
 * lisp.h (DEFUN_NORETURN):
 Communicate the arguments of these macros to defsubr() by means of
 an inline function.
 Declare defsubr(), defsubr_macro() in lisp.h so the compiler knows
 about their calling convention.
 * symbols.c:
 * symbols.c (Fsubr_name):
 Return the string name of the symbol subr name.
 * symbols.c (defsubr_1): New. Bulk of defsubr(),
 defsubr_macro(). Sanity-check the supplied arguments in the same
 way for built-ins as for subrs created by modules. No further need
 to copy a supplied Lisp_Subr to the C heap.
 * symbols.c (defsubr): Revise this to take LNAME, SUBR_FN,
 MIN_ARGS, MAX_ARGS, PROMPT as its arguments, and to return the
 interned symbol name of the subr, this latter used by tests.c.
 * symbols.c (defsubr_macro):
 Ditto.
 * symbols.c (defvar_magic): Move this before syms_of_symbols(),
 same structure as every other file.
 
 * symeval.h:
 * symeval.h (DEFSUBR_MACRO):
 Revise these to use the inline function created by DEFUN() to
 communicate arguments to us.
 * tests.c (TESTS_DEFSUBR):
 Use the fact that DEFSUBR() now returns the symbol bound in this
 macro.
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 Add a new #define for Lisp_Subr->max_args, KEYWORDS, numerically
 identical to MANY but explicitly making LNAME and MIN_ARGS
 available to PARSE_KEYWORDS() as static constants.
 If MAX_ARGS is KEYWORDS, force use of NARGS and ARGS for the
 argument vector length and name.
 Remove explicit use of NARGS and ARGS in calls to
 PARSE_KEYWORDS(), making use of this macro simpler.
 Remove use of GET_DEFUN_LISP_OBJECT() in preparation for future
 work.
 
 * lisp.h:
 * lisp.h (EXFUN_KEYWORDS): New.
 * lisp.h (KEYWORDS): New, numerically equivalent to MANY.
 * lisp.h (DECLARE_LISP_NAME_0): New, dummy to allow LNAME for a
 subr to be communicated to PARSE_KEYWORDS() for a subr that takes
 keyword arguments.
 * lisp.h (DEFUN):
 * lisp.h (DEFUN_NORETURN):
 Revise both these to pass LNAME, MIN_ARGS to the keyword parsing
 code explicitly.
 * lisp.h (GET_DEFUN_LISP_OBJECT): Removed.
 * lisp.h (DEFUN_KEYWORDS): New. Force NARGS, ARGS as the name of
 the arguments for a function declared with KEYWORDS as max_args.
 * lisp.h (PARSE_KEYWORDS_DEFUN_NAME): New. Given Fname, return its
 Lisp name as a constant C string.
 * lisp.h (PARSE_KEYWORDS_DEFUN_MIN_ARGS): New. Given Fname, return its
 min_args as a constant C short.
 * data.c:
 * data.c (Fparse_integer):
 * elhash.c:
 * elhash.c (Fmake_hash_table):
 * lstream.c:
 * lstream.c (Fmake_string_output_stream):
 * sequence.c:
 * sequence.c (Fcount):
 * sequence.c (FmemberX):
 * sequence.c (Fadjoin):
 * sequence.c (FassocX):
 * sequence.c (FrassocX):
 * sequence.c (Fposition):
 * sequence.c (Ffind):
 * sequence.c (FdeleteX):
 * sequence.c (FremoveX):
 * sequence.c (Fdelete_duplicates):
 * sequence.c (Fremove_duplicates):
 * sequence.c (Fmerge):
 * sequence.c (FsortX):
 * sequence.c (Ffill):
 * sequence.c (Freduce):
 * sequence.c (Freplace):
 * sequence.c (Fnsubstitute):
 * sequence.c (Fsubstitute):
 * sequence.c (Fsublis):
 * sequence.c (Fnsublis):
 * sequence.c (Fnsubst):
 * sequence.c (Ftree_equal):
 * sequence.c (Fmismatch):
 * sequence.c (Fsearch):
 * sequence.c (Funion):
 * sequence.c (Fset_exclusive_or):
 Update calls to DEFUN(), PARSE_KEYWORDS() to reflect the above
 changes.
 
 * gpmevent.c:
 * gpmevent.c (Fgpm_enable):
 * gpmevent.c (syms_of_gpmevent):
 * tooltalk.c (init_tooltalk):
 Avoid using GET_DEFUN_LISP_OBJECT() in these files, call the
 corresponding function using its Lisp symbol name
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 Simplify the PARSE_KEYWORDS() macro, no need to specify the number
 of keywords explicitly. Thank you for the technique, Dale Weiler.
 * lisp.h:
 * lisp.h (PARSE_KEYWORDS):
 Correct and update some documentation for this. Remove a couple of
 function calls that attempted to avoid using
 GET_DEFUN_LISP_OBJECT(), something I plan to remove entirely
 shortly anyway.
 * lisp.h (PARSE_KEYWORDS_ARGC_COUNTER): New.
 * lisp.h (PARSE_KEYWORDS_ARGC): New.
 * lisp.h (PARSE_KEYWORDS_CAT): New.
 * lisp.h (PARSE_KEYWORDS_CONCATENATE): New.
 * lisp.h (PARSE_KEYWORDS_7): Rename PARSE_KEYWORDS_8 to this.
 * data.c (Fparse_integer):
 * doprnt.c (Fformat_into):
 * elhash.c (Fmake_hash_table):
 * lstream.c (Fmake_string_output_stream):
 * print.c (Fwrite_sequence):
 * sequence.c (count_with_tail):
 * sequence.c (Fcount):
 * sequence.c (FmemberX):
 * sequence.c (Fadjoin):
 * sequence.c (FassocX):
 * sequence.c (FrassocX):
 * sequence.c (Fposition):
 * sequence.c (Ffind):
 * sequence.c (FdeleteX):
 * sequence.c (FremoveX):
 * sequence.c (Fdelete_duplicates):
 * sequence.c (Fremove_duplicates):
 * sequence.c (Fmerge):
 * sequence.c (FsortX):
 * sequence.c (Ffill):
 * sequence.c (Freduce):
 * sequence.c (Freplace):
 * sequence.c (Fnsubstitute):
 * sequence.c (Fsubstitute):
 * sequence.c (Fsublis):
 * sequence.c (Fnsublis):
 * sequence.c (Fnsubst):
 * sequence.c (Ftree_equal):
 * sequence.c (Fmismatch):
 * sequence.c (Fsearch):
 * sequence.c (venn):
 * sequence.c (nvenn):
 * sequence.c (Funion):
 * sequence.c (Fset_exclusive_or):
 * sequence.c (Fnset_exclusive_or):
 Call PARSE_KEYWORD(), PARSE_KEYWORDS_7() with their new calling
 conventions.
2025年04月05日 Aidan Kehoe <kehoea@parhasard.net>
 Add support for _fseeki64(), _ftelli64() on Windows.
 Quiet Visual Studio warnings on 64-bit platforms regarding type
 narrowing in dumper.c.
 * config.h.in:
 #define FSEEK, FTELL, OFF_T appropriately if we have a recent
 MSVC.
 * dumper.c:
 * dumper.c (struct):
 * dumper.c (pdump_block_list_elt):
 * dumper.c (pdump_make_hash):
 * dumper.c (pdump_add_block):
 * dumper.c (pdump_register_block_contents):
 * dumper.c (pdump_register_block):
 * dumper.c (pdump_store_new_pointer_offsets):
 * dumper.c (pdump_dump_data):
 Update types to better reflect 64-bit platforms in this file.
2025年04月05日 Aidan Kehoe <kehoea@parhasard.net>
 * dumper.c (pdump_align_stream):
 Use EMACS_DUMP_FILE_NAME appropriately when erroring.
 * dumper.c (pdump):
 Ditto.
 Avoid qxe_open() since that leads to pdump choking on
 Windows. Assert that EMACS_DUMP_FILE_NAME is entirely ASCII.
2025年03月20日 Aidan Kehoe <kehoea@parhasard.net>
 * editfns.c (Fcompare_buffer_substrings):
 Revise Fcompare_buffer_substrings() to avoid potentially O(N)
 BUF_FETCH_CHAR() calls. I note GNU has already done this. Extend the
 docstring (some inspiration taken from GNU's current docstring).
2025年04月06日 Aidan Kehoe <kehoea@parhasard.net>
 * .gdbinit.in.in: Remove entries for lrecord_type_ldap,
 lrecord_type_pgconn, lrecord_type_pgresult from this, now they are
 generated at module load time.
 * alloc.c (init_memory_usage_stats): Take TYPE as an int, now that
 is appropriate for DECLARE_MODULE_LISP_OBJECT().
 Add an assertion regarding its value.
 * alloc.c (uninit_memory_usage_stats): Ditto.
 * alloc.c (init_lrecord_implementation_name): Correct a comment. 
 * lrecord.h:
 * lrecord.h (enum lrecord_type):
 Remove lrecord_type_ldap, lrecord_type_pgconn,
 lrecord_type_pgresult from here.
 * lrecord.h (struct lrecord_implementation):
 Change the type of LRECORD_TYPE_INDEX to int, get
 DECLARE_MODULE_LISP_OBJECT() working.
 * lrecord.h (DECLARE_LISP_OBJECT): Be stricter about assertions
 here.
 * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT): Ditto.
2025年03月18日 Aidan Kehoe <kehoea@parhasard.net>
 Move struct lrecord_implementation.name to being an interned
 symbol, which will things simpler for unloading modules and speed
 up Ftype_of() a little.
 * alloc.c:
 Update lrecord_implementation_description_1[] to reflect
 this. Correct some indentation in passing.
 * alloc.c (gc_plist_hack):
 Update argument types in this now the type of
 lrecord_implementation.name has changed.
 * alloc.c (pluralize_word): Ditto.
 * alloc.c (pluralize_and_append): Ditto.
 * alloc.c (object_memory_usage_stats): Ditto.
 * alloc.c (struct saved_object_name): New.
 * alloc.c (init_lrecord_implementation_name): New.
 Usually equivalent to lrecord_implementation_table[TIPO] = intern
 (NAME), but with some special handling for early bootstrap before
 it is possible to intern symbols.
 * data.c (Ftype_of):
 No need to intern() any more, just return the symbol naming the
 type for pointer types.
 * lrecord.h:
 * lrecord.h (struct lrecord_implementation): Update this.
 * lrecord.h (LRECORD_IMPLEMENTATION_IBYTE_NAME): Update this.
 * lrecord.h (MAKE_LISP_OBJECT): Update this to call
 init_lrecord_implementation_name().
 Declare init_lrecord_implementation_name().
 * symbols.c (init_symbols_once_early):
 Create Qnil as soon as we can intern strings, allowing the early
 bootstrapping code to clean up.
2025年03月18日 Aidan Kehoe <kehoea@parhasard.net>
 Wrap access to struct lrecord_implementation.name in preparation
 for further changes.
 * alloc.c (INCREMENT_CONS_COUNTER): Move the second argument here
 to being a pointer to the struct lrecord_implementation, which
 works better with e.g. the ALLOCATE_FIXED_TYPE() macros.
 * alloc.c (old_alloc_sized_lcrecord_1): Call
 INCREMENT_CONS_COUNTER() with its new convention.
 * alloc.c (ALLOCATE_FIXED_TYPE): Ditto.
 * alloc.c (NOSEEUM_ALLOCATE_FIXED_TYPE): Ditto.
 * alloc.c (allocate_big_string_chars): Ditto.
 * alloc.c (allocate_string_chars_struct): Ditto.
 * alloc.c (resize_string): Ditto.
 * data.c (Ftype_of):
 Use the wrapper just introduced.
 * dumper.c (pdump_backtrace): Ditto.
 * dumper.c (pdump_register_object): Ditto.
 * dumper.c (pdump): Ditto.
 * gc.c (kkcc_backtrace_1): Ditto.
 * lrecord.h (struct lrecord_implementation):
 Change the type of NAME to const CIbyte, in preparation for
 further changes.
 * lrecord.h (LRECORD_IMPLEMENTATION_IBYTE_NAME):
 Provide the accessor macro.
 * print.c (printing_unreadable_lisp_object): Use it.
 * print.c (external_object_printer): Use it.
 * print.c (internal_object_printer): Use it.
 * print.c (debug_p4): Use it.
 * symbols.c (print_symbol_value_magic): Use it.
2025年03月16日 Aidan Kehoe <kehoea@parhasard.net>
 * lrecord.h (struct lrecord_implementation):
 Reorder this to reduce wasted space given alignment
 requirements. Document the nsubst_structures_descend method.
2025年03月15日 Aidan Kehoe <kehoea@parhasard.net>
 Remove all the lrecord_implementation structures from the C data
 segment, just use those copies in the dump file (or the heap),
 making things simpler for modules and reducing memory usage for
 core XEmacs.
 * lrecord.h:
 * lrecord.h (LRECORD_IMPLEMENTATION): New. Give a built-in C type
 name (cons, bignum, etc) return a pointer to the
 lrecord_implementation of the corresponding Lisp object using
 lrecord_implementations_table.
 * lrecord.h (ALLOC_NORMAL_LISP_OBJECT):
 Use it.
 * lrecord.h (NORMAL_LISP_OBJECT_HEADER):
 Use it.
 * lrecord.h (ALLOC_C_READONLY_LISP_OBJECT):
 Use it.
 * lrecord.h (INIT_MEMORY_USAGE_STATS): Move this further up in the
 file.
 * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT):
 Revise this to use the new calling convention for
 MAKE_LISP_OBJECT().
 * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_NODUMP_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT):
 Ditto.
 * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT):
 Ditto.
 * lrecord.h (MAKE_LISP_OBJECT):
 Call init_lrecord_type_##c_name() here, initialize the enumeration
 for module objects if that is appropriate.
 * lrecord.h (UNDEF_LISP_OBJECT): Removed.
 * lrecord.h (UNDEF_MODULE_LISP_OBJECT):
 Revise this to subsume UNDEF_LISP_OBJECT().
 * lrecord.h (OBJECT_HAS_METHOD):
 Use LRECORD_IMPLEMENTATION() here.
 * lrecord.h (OBJECT_HAS_PREMETHOD):
 Ditto.
 * lrecord.h (OBJECT_HAS_NAMED_METHOD):
 Ditto.
 * lrecord.h (OBJECT_HAS_PROPERTY):
 Ditto.
 * lrecord.h (DECLARE_LISP_OBJECT_1): New.
 DECLARE_LISP_OBJECT without its init_lrecord_##c_name().
 * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT): Use it.
 * lrecord.h (DECLARE_MODULE_LISP_OBJECT): Use it.
 * lrecord.h (DECLARE_LISP_OBJECT): Use it.
 * alloc.c:
 Call DECLARE_LISP_OBJECT() for Lisp_Free here, now that is
 needed.
 * alloc.c (Fcons):
 Move the DEFINE.*LISP_OBJECT() to init_alloc_once_early().
 Use LRECORD_IMPLEMENTATION (cons) rather than &lrecord_cons.
 * alloc.c (noseeum_cons):
 Ditto. 
 * alloc.c (make_float):
 Use LRECORD_IMPLEMENTATION (c_type) rather than &lrecord_c_type.
 * alloc.c (make_bignum): Ditto.
 * alloc.c (make_bignum_un): Ditto.
 * alloc.c (make_bignum_ll): Ditto. 
 * alloc.c (make_bignum_ull): Ditto.
 * alloc.c (make_bignum_bg): Ditto. 
 * alloc.c (make_ratio): Ditto.
 * alloc.c (make_ratio_bg): Ditto.
 * alloc.c (make_ratio_rt): Ditto.
 * alloc.c (make_bigfloat): Ditto.
 * alloc.c (make_bigfloat_bf): Ditto. 
 * alloc.c (make_bit_vector_internal): Ditto.
 * alloc.c (make_compiled_function): Ditto.
 * alloc.c (make_subr): Ditto.
 * alloc.c (Fmake_symbol): Ditto.
 * alloc.c (allocate_extent): Ditto.
 * alloc.c (allocate_event): Ditto. 
 * alloc.c (Fmake_marker): Ditto.
 * alloc.c (noseeum_make_marker): Ditto.
 * alloc.c (make_uninit_string): Ditto.
 * alloc.c (make_string_nocopy): Ditto.
 * alloc.c (make_lcrecord_list): Ditto.
 * alloc.c (init_memory_usage_stats): Create Vmemusage_stats_lists
 if it is Qnull_pointer, which means this function has been called
 from within DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT().
 * alloc.c (disksave_object_finalization_1):
 If ERROR_CHECK_TYPES, call error_check_free() once to suppress
 warnings.
 * alloc.c (init_alloc_once_early):
 Call DEFINE.*LISP_OBJECT() rather than the removed
 INIT_LISP_OBJECT() here. Reorder the calls to create the vector
 object first given it is needed for Vmemusage_stats_list.
 * buffer.c:
 * buffer.c (syms_of_buffer): Call DEFINE_NODUMP_LISP_OBJECT()
 here.
 * buffer.c (common_init_complex_vars_of_buffer):
 Use LRECORD_IMPLEMENTATION (c_type) rather than &lrecord_c_type.
 * bytecode.c:
 * bytecode.c (syms_of_bytecode):
 Call DEFINE.*LISP_OBJECT() rather than the removed INIT_LISP_OBJECT()
 here.
 * casetab.c (syms_of_casetab):
 Ditto.
 * chartab.c (syms_of_chartab):
 Ditto.
 * console.c (syms_of_console):
 Ditto.
 * console.c (common_init_complex_vars_of_console):
 Use LRECORD_IMPLEMENTATION (c_type) rather than &lrecord_c_type.
 * data.c (syms_of_data):
 Call DEFINE.*LISP_OBJECT() rather than the removed INIT_LISP_OBJECT()
 here.
 * database.c (syms_of_database): Ditto.
 * device-msw.c (syms_of_device_mswindows): Ditto.
 * device.c (syms_of_device): Ditto.
 * dialog-msw.c (syms_of_dialog_mswindows): Ditto.
 * elhash.c (init_elhash_once_early): Ditto.
 * emacs.c (main_1): Remove mention of INIT_LISP_OBJECT() from here.
 * eval.c (syms_of_eval):
 Call DEFINE.*LISP_OBJECT() rather than the removed INIT_LISP_OBJECT()
 here.
 * event-stream.c (syms_of_event_stream): Ditto.
 * events.c (syms_of_events): Ditto.
 * extents.c (syms_of_extents): Ditto.
 * faces.c (syms_of_faces): Ditto.
 * file-coding.c (syms_of_file_coding): Ditto.
 * floatfns.c (syms_of_floatfns): Ditto.
 * font-mgr.c (syms_of_font_mgr): Ditto.
 * fontcolor.c (syms_of_fontcolor): Ditto.
 * frame.c (syms_of_frame): Ditto.
 * glyphs.c (syms_of_glyphs): Ditto.
 * gui.c (syms_of_gui): Ditto.
 * keymap.c (syms_of_keymap): Ditto.
 * lstream.c:
 * lstream.c (Lstream_new):
 Use LRECORD_IMPLEMENTATION (c_type) rather than &lrecord_c_type.
 * lstream.c (syms_of_lstream):
 Call DEFINE.*LISP_OBJECT() rather than the removed INIT_LISP_OBJECT()
 here.
 * lstream.h (INIT_STACK_FIXED_BUFFER_OUTPUT_STREAM):
 Use LRECORD_IMPLEMENTATION (c_type) rather than &lrecord_c_type.
 * marker.c (syms_of_marker):
 Call DEFINE.*LISP_OBJECT() rather than the removed INIT_LISP_OBJECT()
 here.
 * mule-charset.c (syms_of_mule_charset):
 Ditto.
 * number.c (syms_of_number): Ditto.
 * opaque.c (init_opaque_once_early): Ditto.
 * process.c (syms_of_process): Ditto.
 * rangetab.c (syms_of_rangetab): Ditto.
 * scrollbar.c (syms_of_scrollbar): Ditto.
 * specifier.c (syms_of_specifier): Ditto.
 * symbols.c (init_symbols_once_early): Ditto.
 * toolbar.c (syms_of_toolbar): Ditto.
 * tooltalk.c (syms_of_tooltalk): Ditto.
 * ui-gtk.c (syms_of_ui_gtk): Ditto.
 * unicode.c (syms_of_unicode): Ditto.
 * window.c (syms_of_window): Ditto.
2025年03月11日 Aidan Kehoe <kehoea@parhasard.net>
 * redisplay.c (redisplay_frame):
 Correct a bug in my last change elicited when f->old_buffer_alist
 is equal in length to f->buffer_alist, thank you Stephen
 Turnbull.
 * lisp.h (Freplace_list): Remove declaration for this in passing.
2025年03月08日 Aidan Kehoe <kehoea@parhasard.net>
 * fns.c (Freplace_list): Removed. Inappropriate to have it in C,
 now Freplace() is built-in.
 * fns.c (syms_of_fns):
 Remove its DEFSUBR.
 * redisplay.c (redisplay_frame):
 Replace the only call to Freplace_list() from C with its
 implementation. 
 * sequence.c (syms_of_sequence):
 Define substring as an alias for subseq here rather than in
 subr.el, avoiding issues with feature checks when loading
 subr.elc.
2025年03月08日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c (Fmake_byte_code):
 Eagerly call optimize_compiled_function if PURIFY_FLAG, since
 otherwise those compiled functions not called at dump time have
 their string instructions stored in the dump file, and those
 string instructions are leaked on first call since nothing in the
 dump file is swept.
2025年03月06日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c (compile_extended_range):
 If THIS_CHAR is not a valid Ichar, don't look it up in the
 translation table, avoiding crashes with error checking when
 invalid characters are within the range specified. Do include them
 in the range table, which will allow coalescing ranges that would
 otherwise not be.
2025年03月06日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c (re_wctype): Change type of LIMIT to Bytecount, as had
 always been the intention.
 * regex.h: Update its declaration.
2025年03月04日 Aidan Kehoe <kehoea@parhasard.net>
 Use C23's #embed, if available, for the dump file with
 DUMP_IN_EXEC. Fall back to Dale Weiler's INCBIN() as previously
 used if #embed is not available.
 clang-19 doesn't accept concatenation of EMACS_PROGNAME with
 ".dmp" as a valid filename for #embed, add EMACS_DUMP_FILE_NAME to
 config.h and use that. Use DUMP_FILE_NAME as the corresponding
 autoconf variable.
 * Makefile.in.in:
 * Makefile.in.in ($(RAW_EXE)): Now we have the C compiler involved
 in embedding the dump file again, it attempts once more to put an
 all-zero dump file into BSS. Use Larry McVoy's magic values to
 prevent this as the insert-data-in-exec code used to.
 Use @DUMP_FILE_NAME@ instead of $(DUMP_TARGET).dmp throughout this
 file.
 * config.h.in (EMACS_DUMP_FILE_NAME):
 * dump-data.c: Use #embed for dumped_data if available. If #embed
 is available, we have a recent enough C implementation that
 <stdalign.h> is going to be available, use alignas() to force
 16-byte alignment.
 * dumper.c (pdump):
 Use EMACS_DUMP_FILE_NAME explicitly for the dump file name.
2025年03月03日 Aidan Kehoe <kehoea@parhasard.net>
 * redisplay-tty.c (tty_output_display_block):
 Placate warnings on recent Clang, variable length arrays are a C99
 extension not guaranteed to be available in C++.
2025年03月03日 Aidan Kehoe <kehoea@parhasard.net>
 * syswindows.h:
 Widen the front of the fight between the X11 headers and the Win32
 headers for the sake of the Cygwin compilation.
 * xemacs.def.in.in:
 Update this with newly-added functions that need to be visible to
 the modules.
2025年03月02日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h (RESET_GCPROLIST): New macro, set GCPROLIST to NULL,
 avoiding tripping error checking.
 * emacs.c (Frun_emacs_from_temacs):
 Use it, since our stack is about to become invalid.
2025年03月01日 Aidan Kehoe <kehoea@parhasard.net>
 * lstream.h (DEFINE_LSTREAM_IMPLEMENTATION_WITH_DATA):
 Suppress warnings about interleaving declarations and code when
 compiling as C99.
2025年03月01日 Aidan Kehoe <kehoea@parhasard.net>
 Remove the EVENT_DATA_AS_OBJECTS code, not used in over twenty
 years and not adding any value. Commit generated with unifdef
 -UEVENT_DATA_AS_OBJECTS. 
 * alloc.c:
 * alloc.c (gc_sweep_1):
 * alloc.c (common_init_alloc_early):
 * events.c:
 * events.c (Fcopy_event):
 * events.c (syms_of_events):
 * events.h:
 * events.h (EVENT_FOO_BAR):
 * events.h (struct Lisp_Key_Data):
 * events.h (struct Lisp_Button_Data):
 * events.h (struct Lisp_Motion_Data):
 * events.h (struct Lisp_Process_Data):
 * events.h (struct Lisp_Timeout_Data):
 * events.h (struct Lisp_Eval_Data):
 * events.h (struct Lisp_Misc_User_Data):
 * events.h (struct Lisp_Magic_Eval_Data):
 * events.h (struct Lisp_Magic_Data):
 * events.h (struct Lisp_Event):
 * events.h (XSET_EVENT_NEXT):
 * lisp.h:
 * lrecord.h (enum lrecord_type):
2025年03月01日 Aidan Kehoe <kehoea@parhasard.net>
 * symeval.h (XSYMBOL_VALUE_MAGIC):
 Correct a compile time failure with --with-optimization, thank you
 the buildbot.
2025年02月28日 Aidan Kehoe <kehoea@parhasard.net>
 Fix further crash linked to the AMD64 red zone, this time with
 --with-optimize and GCC, which chooses to ignore the size of an
 array not written to. Change strategy to, within xemacs_c_alloca
 (), a non-leaf function, compare the address of a local variable
 to STACK_BOTTOM, already provided for gc.c, and work out the stack
 direction from that. Thank you Mats Lidell and the buildbot.
 * alloca.c (find_stack_direction): Remove this, it is currently
 too prone to failure with optimizing compilers.
 * alloca.c (xemacs_c_alloca): Implement it in a simpler way.
2025年02月28日 Aidan Kehoe <kehoea@parhasard.net>
 Add type checking for symbol_value_magic objects in the same way
 as for more conventional objects.
 * symbols.c:
 Update comments.
 * symbols.c (defvar_magic): 
 Update defvar_magic() to take a Lisp_Object as its second arg,
 reducing the need to cast. Add a type checking assertion to this
 function.
 * symeval.h:
 * symeval.h (enum symbol_value_type):
 Remove #if 0'd SYMVAL_CONSTANT_SYMBOL, which I don't plan to
 implement.
 * symeval.h (ASSERT_OK_FOR_MAGIC): New macro, checks that an enum
 symbol_value_type is for a type that has a MAGICFUN
 implementation.
 * symeval.h (DEFVAR_SYMVAL_FWD_NON_LISP): Use it. Call
 defvar_magic() with its new types.
 * symeval.h (DEFVAR_SYMVAL_FWD_OBJECT): Ditto.
2025年02月24日 Aidan Kehoe <kehoea@parhasard.net>
 Quiet compiler warnings, clang-19.
 * alloc.c (old_alloc_sized_c_readonly_lcrecord): Removed. Added as
 part of the support for allocating symbol_value_forward_fixnum and
 symbol_value_forward_boolint on the heap, but not actually used by
 that.
 * frame-x.c (x_cant_notify_wm_error):
 Use (void) for the arglist in the definition of this function.
 * gccache-x.c (define_gc_cache_hash_table_test):
 Ditto.
 * gpmevent.c (Freceive_gpm_event): Remove NUM_EVENTS, a debugging
 variable set but not used.
 * miscplay.c (reset_parsestate):
 Use (void) for the arglist in the definition of this function.
 * miscplay.c (parse_wave_complete): Ditto.
 * regex.c:
 * regex.c (optimize_on_failure_jump):
 * regex.c (regex_compile):
 * regex.c (at_begline_loc_p): Remove SYNTAX from the arglist for
 this, now unused.
 * regex.c (at_endline_loc_p): Ditto.
 * regex.c (compile_range): Ditto. Also remove REGNUM, set but not
 used.
 * regex.c (expression_match_null_string_p): Remove BUFP from the
 arglist for this, now unused.
 * search.c (matcher_overflow):
 Use (void) for the arglist in the definition of this function.
 * sysdll.c (dll_error):
 Ditto.
2025年02月24日 Aidan Kehoe <kehoea@parhasard.net>
 * number.c (Fcanonicalize_number):
 Error if NUMBER is not a number.
 * number.c (Fcoerce_number):
 Ditto. Give a better error message if TYPE is not supported.
2025年02月24日 Aidan Kehoe <kehoea@parhasard.net>
 * chartab.c:
 * chartab.c (word_boundary_p):
 Modernise the return type for this. Use EXTERNAL_LISP_LOOP_2()
 when examining Vword_separating_categories,
 Vword_combining_categories, so we error instead of provoking an
 infinite loop.
 * chartab.h:
 Update the return type for word_boundary_p().
2025年02月23日 Aidan Kehoe <kehoea@parhasard.net>
 * symbols.c (Fset):
 Call DUMPEDP on XPNTRVAL (valcontents) here, placating the union
 build. Thank you Mats Lidell and the buildbot.
2025年02月23日 Aidan Kehoe <kehoea@parhasard.net>
 Mark and dump through the VALUE field of the symbol-value-forward
 objects when appropriate, removing the need for staticpro() for
 those objects.
 Use XD_BLOCK_DATA_PTR to describe staticpros, struct
 console_methods.device_specific_frame_props.
 Remove the XD_DATA_POINTER description type, no longer needed now
 more fine-grained descriptions appropriate.
 * .gdbinit.in.in (Lisp): Add a couple of new symbol-value-magic
 types for this.
 * alloc.c:
 * alloc.c (old_alloc_sized_lcrecord_1): New. Equivalent to the
 following but with a C_READONLY_P flag; if this is non-zero, mark
 the returned object as C_READONLY (and LISP_READONLY, MARKed), and
 do not add it to all_lcrecords.
 * alloc.c (old_alloc_sized_lcrecord): Implement it in terms of
 old_alloc_sized_lcrecord_1().
 * alloc.c (old_alloc_sized_c_readonly_lcrecord). New. Call
 old_alloc_sized_lcrecord_1() with C_READONLY_P 1.
 * alloc.c (make_lcrecord_list): Correct the type of the SIZE
 argument to this.
 * alloc.c (alloc_managed_lcrecord_1): New. Refactored out to take
 a C_READONLY_P flag. Remove an #if 0'd block.
 * alloc.c (alloc_managed_lcrecord). Implement using
 alloc_managed_lcrecord_1().
 * alloc.c (free_managed_lcrecord): Unmark the record as C_READONLY.
 * alloc.c (alloc_automanaged_sized_lcrecord_1): New. Refactored
 out from the following, to take a C_READONLY_P flag.
 * alloc.c (alloc_automanaged_lcrecord): Implement in terms of
 previous.
 * alloc.c (alloc_automanaged_c_readonly_lcrecord) New. Used for
 symbol_value_forward_fixnum, symbol_value_forward_boolint.
 * alloc.c (staticpro_description_1): Use XD_BLOCK_DATA_PTR in
 this.
 * alloc.c (staticpro): No need for dump_add_root_lisp_object() in
 this now XD_BLOCK_DATA_PTR is used in the description.
 * buffer.c (DEFVAR_BUFFER_LOCAL_1):
 Implement this using DEFVAR_SYMVAL_FWD_OBJECT().
 * buffer.c (DEFVAR_BUFFER_DEFAULTS_MAGIC):
 Use DEFVAR_SYMVAL_FWD_OBJECT() to implement this.
 * console.c:
 Use XD_BLOCK_DATA_PTR to describe struct
 console_methods.device_specific_frame_props.
 * console.c (DEFVAR_CONSOLE_LOCAL_1):
 Implement this using DEFVAR_SYMVAL_FWD_OBJECT().
 * console.c (DEFVAR_CONSOLE_DEFAULTS_MAGIC):
 Ditto.
 * lrecord.h (enum lrecord_type):
 Add new entries, lrecord_type_symbol_value_forward_object (for
 when VALUE needs to be GCed) and
 lrecord_type_symbol_value_forward_fixnum,
 lrecord_type_symbol_value_forward_boolint, to allow pdump to dump
 the values without an explicit dump_add_opaque_int.
 * symbols.c:
 * symbols.c (static const struct memory_description
 symbol_value_magic_description_1): Revise this, the data pointer
 is no longer needed for the general symbol_value_magic
 description.
 * symbols.c (static const struct memory_description
 symbol_value_forward_object_description): New. Describe
 symbol_value_forward_object using XD_BLOCK_DATA_PTR.
 * symbols.c (static const struct memory_description
 symbol_value_forward_fixnum_description): New. Describe
 symbol_value_forward_fixnum using XD_BLOCK_DATA_PTR.
 * symbols.c (static const struct memory_description
 symbol_value_forward_boolint_description): New. Describe
 symbol_value_forward_boolint using XD_BLOCK_DATA_PTR.
 * symbols.c (do_symval_forwarding):
 Rearrange this to handle fixnums and boolint forwarding better,
 less need for casts.
 * symbols.c (set_default_buffer_slot_variable):
 Use symbol_value_forward_object() within this, rather than
 symbol_value_forward, now removed.
 * symbols.c (set_default_console_slot_variable):
 Ditto.
 * symbols.c (store_symval_forwarding):
 No need to check whether OVALUE is EQ to Qunbound, if we have
 already established that OVALUE is not SYMBOL_VALUE_MAGIC_P.
 Use the new symbol value magic types within this.
 * symbols.c (Fset):
 When making a SYMVAL_OBJECT_FORWARD unbound during unloading of a
 module, make its FORWARD pointer NULL and avoid GC choking.
 No longer unstaticpro_nodump().
 * symbols.c (default_value):
 Use XSYMBOL_VALUE_FORWARD_OBJECT() here.
 * symbols.c (symbol_value_buffer_local_info):
 Ditto.
 * symbols.c (init_symbols_once_early):
 Initialize the new symbol_value_forward objects.
 * symbols.c (defvar_magic):
 Change the type of the second arg here, to const struct
 symbol_value_magic *.
 * symeval.h:
 * symeval.h (struct symbol_value_magic):
 Revise this, don't include the VALUE * field, only used by a
 subset of those types that are SYMBOL_VALUE_MAGIC_P().
 * symeval.h (struct symbol_value_forward_object): New. A
 symbol_value_forward that points to a Lisp_Object and that should
 be dumped and GCed as such.
 * symeval.h (struct symbol_value_forward_fixnum): New. A
 symbol_value_forward that points to a Fixnum and that should
 be dumped as such; this fixnum can be ignored for GC.
 * symeval.h (struct symbol_value_forward_boolint): New. A
 symbol_value_forward that points to a Boolint and that should
 be dumped as such; this boolint can be ignored for GC.
 * symeval.h (struct symbol_value_buffer_local):
 Add a comment to the MAGIC field of this structure.
 * symeval.h (DEFVAR_SYMVAL_FWD_NON_LISP): New. Common
 implementation of DEFVAR_SYMVAL_FWD_FIXNUM(),
 DEFVAR_SYMVAL_FWD_BOOL().
 Allocate the structure on the heap rather than in the C data
 segment, avoiding leaking the original structure
 post-pdump_load().
 * symeval.h (DEFVAR_SYMVAL_FWD_OBJECT): Heavily revised. Allocate
 the struct symbol_value_forward_object as a Lisp object, don't
 mark it c_readonly (which means it will now be traversed for GC).
 * symeval.h (DEFVAR_LISP_MAGIC):
 Move this #define together with the others that use
 DEFVAR_SYMVAL_FWD_OBJECT().
2025年02月22日 Aidan Kehoe <kehoea@parhasard.net>
 Remove support for byte-compile-dynamic at runtime, no longer
 worth the decrease in speed and difficulties with files being
 recompiled and offsets getting incorrect with with RAM sizes as
 they are. I note GNU has already done this.
 
 * alloc.c (Fmake_byte_code):
 No longer accept INSTRUCTIIONS as a (FILE . POS) lazy offset.
 * bytecode.c:
 * bytecode.c (optimize_compiled_function):
 No longer call Ffetch_bytecode() from within this.
 * bytecode.c (Ffetch_bytecode): Removed.
 * bytecode.c (syms_of_bytecode): Remove its DEFSUBR.
 * doc.c (get_doc_string): Clarify that the functionality to load
 bytee code instructions and constants will be removed.
 * doc.c (read_doc_string): Remove this, no longer used.
 * lisp.h: Remove its declaration.
 * lread.c (read_compiled_function):
 Always immediately load lazy byte code instructions. Bracket this
 with #ifdef NEED_TO_HANDLE_21_4_CODE.
2025年02月22日 Aidan Kehoe <kehoea@parhasard.net>
 Avoid difficulties with byte-compile-dynamic and print-gensym,
 print-circle, just load the instructions and the compiled
 function constants if there might be a gensym or a recursive
 object in them, allowing them to reference gensyms in the argument
 list.
 * doc.c (get_doc_string): Make this non-static.
 * lisp.h: Declare it.
 * lread.c (read_compiled_function):
 Use it here.
2025年02月19日 Aidan Kehoe <kehoea@parhasard.net>
 Delay calls to FcInit() until
 lwlib-fonts.c:xft_open_font_by_name() or
 fontcolor-xlike-inc.c:xft_find_charset_font(), avoiding updating
 out-of-tree cache files at build time, something Gentoo does not
 like. Thank you for the bug report, Mats Lidell.
 * emacs.c (main_1):
 Remove the call to reinit_vars_of_font_mgr() here.
 * font-mgr.c (reinit_vars_of_font_mgr): Removed. All it did was
 call FcInit() basically directly after pdump_load(), for which
 there is no need, reasonable to delay until we open an X11 device.
 * symsinit.h:
 Remove its declaration.
2025年02月19日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c (re_match_2_internal):
 Correct an assertion here that was incompletely merged from GNU's code,
 picked up by Stephen Turnbull on an M1 mac, of course P isn't
 guaranteed to be >= BUFP->BUFFER, since P points into the stack
 copy of BUFP->BUFFER on XEmacs. Thank you Steve!
2025年02月14日 Aidan Kehoe <kehoea@parhasard.net>
 New data description enumeration values:
 1. XD_BLOCK_DATA_PTR, like XD_BLOCK_PTR but describing pointers
 into the C data segment. Added in preparation for further work.
 2. XD_MEMORY_DESCRIPTION, used for pointers to struct
 memory_description, will be useful if error checking added to
 pdump.
 2. XD_SIZED_MEMORY_DESCRIPTION, used for pointers to struct
 sized_memory_description, same motivation as previous.
 * alloc.c:
 * alloc.c (static const struct sized_memory_description
 c_data_pointer_description): Removed.
 * alloc.c (static const struct sized_memory_description
 memory_description_description): New.
 Use this to describe lrecord_memory_descriptions.
 
 * dumper.c (pdump_register_sub):
 Handle XD_BLOCK_DATA_PTR like XD_BLOCK_PTR, but add a
 corresponding entry to pdump_root_blocks in order that the address
 in the C data segment be updated correctly during
 pdump_load_finish().
 Handle XD_MEMORY_DESCRIPTION, XD_SIZED_MEMORY_DESCRIPTION like
 XD_DATA_POINTER.
 * dumper.c (pdump_store_new_pointer_offsets):
 Handle XD_BLOCK_DATA_PTR like XD_BLOCK_PTR here.
 * dumper.c (pdump_reloc_one): Ditto.
 Update some aspects of an outdated comment from Ben.
 * file-coding.c: Use XD_SIZED_MEMORY_DESCRIPTION in describing
 extra_description, stream_description within struct
 coding_system_methods.
 * gc.c (lispdesc_one_description_line_size):
 Add entries for XD_MEMORY_DESCRIPTION, XD_SIZED_MEMORY_DESCRIPTION.
 Handle XD_BLOCK_DATA_PTR like XD_BLOCK_PTR here.
 * gc.c (kkcc_marking): Ditto.
 * lrecord.h:
 Document XD_BLOCK_DATA_PTR, XD_MEMORY_DESCRIPTION,
 XD_SIZED_MEMORY_DESCRIPTION.
 * lrecord.h (enum memory_description_type):
 Add the enumeration values.
 * lstream.c: Use XD_SIZED_MEMORY_DESCRIPTION to describe
 extra_description within struct lstream_implementation.
 * specifier.c: Use XD_SIZED_MEMORY_DESCRIPTION to describe
 extra_description within struct specifier_methods.
2025年02月13日 Aidan Kehoe <kehoea@parhasard.net>
 Incorporate Stefan Monnier's change of 0683b6fa90db, 2000年03月26日,
 which adds a distinct type of circularity checking for non-greedy
 operators.
 This can be optimized away if we know an expression cannot match
 the null string. Use our existing infrastructure for this (which
 had been used at runtime previous to 0b8b6fc94d06). Extend this to
 so we can determine if a duplicate instruction can match the null
 string.
 * regex.c: Update some comments at the opening of this file.
 * regex.c (enum): Add `on_failure_jump_nastyloop'.
 * regex.c (print_partial_compiled_pattern): Print it.
 * regex.c (CHECK_INFINITE_LOOP): Set a local variable indicating th
 * regex.c (enum reg_match_null_info): New. Enumeration documenting
 whether a group can match the null string, or if that is not yet
 known.
 * regex.c (reg_info_t): New. Type used by optimize_on_failure_jump
 for metadata about groups (offset within the pattern, whether they
 can match the null string).
 
 * regex.c (optimize_on_failure_jump): Rename from
 fixup_on_failure_jump_smart. When we encounter start_memory, save
 the offset within the string (don't call group_match_null_string_p
 yet, since that depends on the on_failure_jump_smart handling
 having done its work).
 When on_failure_jump_nastyloop is encountered, call
 group_match_null_string_p() on the groups seen so far, and rewrite
 the expression to on_failure_jump if the expression cannot match
 the null string.
 * regex.c (regex_compile):
 Use on_failure_jump_nastyloop here.
 * regex.c (re_compile_fastmap): Fix some indentation.
 * regex.c (re_search_2):
 * regex.c (re_match_2_internal):
 Implement on_failure_jump_nastyloop, thank you Stefan Monnier.
 * regex.c (expression_match_null_string_p): New.
 * regex.c (group_match_null_string_p): Update to take a reginfo_t
 argument. 
 * regex.c (alt_match_null_string_p): Ditto.
 * regex.c (common_op_match_null_string_p): Ditto. If
 on_failure_jump_loop or on_failure_jump_nastyloop is encountered,
 return true.
2025年02月12日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c:
 * regex.c (print_partial_compiled_pattern):
 Print /succeed for the succeed opcode. Print accurate
 destinations for succeed_n, jump_n, set_number_at.
 * regex.c (DEBUG_COMPILE_PRINT): New. Analogous to
 DEBUG_MATCH_PRINT(), DEBUG_FAIL_PRINT().
 * regex.c (ENSURE_FAIL_STACK): Call DEBUG_MATCH_PRINT(), not
 DEBUG_PRINT(). 
 * regex.c (PUSH_FAILURE_REG): Ditto.
 * regex.c (POP_FAILURE_REG): Ditto.
 * regex.c (CHECK_INFINITE_LOOP): Ditto.
 * regex.c (PUSH_FAILURE_POINT): Ditto.
 * regex.c (POP_FAILURE_POINT): Ditto.
 * regex.c (fixup_on_failure_jump_smart):
 Call DEBUG_COMPILE_PRINT(), not DEBUG_PRINT().
 * regex.c (regex_compile):
 Clarify the documentation of re_ngroups.
 Use DEBUG_COMPILE_PRINT(), not DEBUG_PRINT().
 Correct some documentation now on_failure_jump_exclusive is used
 for ".*\n".
 * regex.c (mutually_exclusive_p):
 Use DEBUG_COMPILE_PRINT(), not DEBUG_PRINT() here.
 * regex.c (re_match_2_internal):
 Use DEBUG_MATCH_PRINT(), not DEBUG_PRINT() here.
 * regex.h (struct re_pattern_buffer):
 Clarify documentation of the re_ngroups field.
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 * cmds.c:
 Make Qkill_region available here.
 * cmds.c (Fdelete_char):
 Don't call Qkill_forward_chars from this function if KILLP, it has
 never added any value compared to calling Qkill_region directly as
 far back as our version control goes, since it is always supplied
 a fixnum argument.
 * cmds.c (syms_of_cmds):
 Supply a DEFSYMBOL for Qkill_region
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 Add the skip_ascii() optimization to the multibyte coding systems
 if the relevant charsets make that appropriate.
 Also provide a character_tell() method to allow the buffer
 insertion code to work out how many characters were inserted
 without counting them itself.
 * mule-coding.c:
 * mule-coding.c (struct multibyte_coding_stream):
 Store the count of characters seen in the coding stream.
 * mule-coding.c (multibyte_decode):
 Check the precedence array flags for whether we can call
 skip_ascii().
 Call it when appropriate, on the model of the same code in the
 UTF-8 decoder.
 * mule-coding.c (multibyte_character_tell):
 New method.
 * mule-coding.c (coding_system_type_create_mule_coding):
 Declare that multibyte has this method.
 * file-coding.c (print_coding_system):
 In passing, print the coding system's UID as we do for every other
 Lisp object.
2025年01月20日 Aidan Kehoe <kehoea@parhasard.net>
 Now NEWGC is gone, make the precedence_array objects dumpable.
 Use this in mule-coding.c for the multibyte coding systems and
 Big4, shift_jis.
 * lisp.h:
 Declare precedence_array_to_list(), for the sake of
 multibyte_getprop().
 * mule-coding.c (Vshift_jis_precedence, Vbig5_precedence):
 Removed. Store them in the corresponding coding system objects
 instead.
 * mule-coding.c (struct multibyte_coding_system):
 Put the predence array object into the multibyte_coding_stream as
 had always been the intention.
 * mule-coding.c (CODING_SYSTEM_MBCS_CHARSET_PRECEDENCE): New macro.
 * mule-coding.c (XCODING_SYSTEM_MBCS_CHARSET_PRECEDENCE): New macro.
 * mule-coding.c (struct multibyte_coding_stream):
 Remove the precedence array object from the coding stream, as was
 always the intention.
 * mule-coding.c (multibyte_coding_system_description): Update this.
 * mule-coding.c (multibyte_coding_stream_description): Update this.
 * mule-coding.c (multibyte_init_coding_stream):
 Remove generating the precedence_array from this function, done
 once at dump time for the coding system object itself instead.
 * mule-coding.c (multibyte_decode): Fetch the precedence array
 from the right place.
 * mule-coding.c (multibyte_encode): Ditto.
 * mule-coding.c (multibyte_init):
 Allocate the precedence array when initializing the coding
 system.
 * mule-coding.c (multibyte_putprop):
 Use add_charset_to_precedence_array() when Qcharsets was
 specified.
 * mule-coding.c (multibyte_getprop):
 Call precedence_array_to_list() when Qcharsets was specified.
 * mule-coding.c (multibyte_print):
 Print the charset names of the precedence array in this.
 * mule-coding.c (struct shift_jis_coding_system):
 Store the charset precedence in the shift_jis coding system
 object.
 * mule-coding.c (CODING_SYSTEM_SHIFT_JIS_CHARSET_PRECEDENCE): New
 macro.
 * mule-coding.c (XCODING_SYSTEM_SHIFT_JIS_CHARSET_PRECEDENCE): New
 macro.
 * mule-coding.c (shift_jis_encode): Fetch the precedence array
 from the right place.
 * mule-coding.c (shift_jis_init):
 Allocate the precedence array when initializing the coding
 system.
 * mule-coding.c (Fencode_shift_jis_char):
 Fetch the precedence array from the coding system object.
 * mule-coding.c (struct big5_coding_system):
 Store the charset precedence in the big5 coding system
 object.
 * mule-coding.c (CODING_SYSTEM_BIG5_CHARSET_PRECEDENCE): New macro.
 * mule-coding.c (XCODING_SYSTEM_BIG5_CHARSET_PRECEDENCE): New macro.
 * mule-coding.c (big5_encode): Fetch the precedence array
 from the right place.
 * mule-coding.c (big5_init):
 Allocate the precedence array when initializing the coding
 system.
 * mule-coding.c (Fencode_big5_char): Fetch the precedence array
 from the right place.
 * mule-coding.c (coding_system_type_create_mule_coding):
 No need for the finalize method for the multibyte coding systems,
 the precedence array's finalize method will be invoked if needed,
 and it usually won't be needed.
 Declare init methods for shift_jis, big5.
 * mule-coding.c (vars_of_mule_coding):
 Remove declaration for Vshift_jis_precedence, Vbig5_precedence.
 * mule-coding.c (init_mule_coding):
 This is now empty.
 * unicode.c:
 Define the precedence_array as a dumpable lisp object.
 * unicode.c (precedence_array_to_list):
 Make this function non-static.
2025年02月03日 Aidan Kehoe <kehoea@parhasard.net>
 Remove --without-mule as an option given maturity of the Mule
 code and limited development resources to devote to non-Mule bugs
 and features.
 Use unifdef -DMULE for this, which applies fairly cleanly apart
 from in regex.c, where most of the #ifdef MULE code had to be
 changed to #ifdef emacs.
 This changes also removes HAVE_DEFAULT_EOL_DETECTION, only
 relevant for non-MULE.
 * Makefile.in.in:
 * Makefile.in.in (mule_objs):
 * alloc.c:
 * alloc.c (init_string_ascii_end):
 * alloc.c (make_string):
 * alloc.c (disksave_object_finalization):
 * buffer.c:
 * buffer.c (finish_init_buffer):
 * buffer.c (syms_of_buffer):
 * buffer.c (common_init_complex_vars_of_buffer):
 * buffer.h:
 * buffer.h (struct buffer_text):
 * buffer.h (BUF_FORMAT):
 * bufslots.h:
 * charset.h:
 * chartab.c:
 * chartab.c (char_table_hash):
 * chartab.c (char_table_type_to_symbol):
 * chartab.c (symbol_to_char_table_type):
 * chartab.c (char_table_default_for_type):
 * chartab.c (decode_char_table_range):
 * chartab.c (Fchar_table_type_list):
 * chartab.c (Fvalid_char_table_type_p):
 * chartab.c (check_valid_char_table_value):
 * chartab.c (put_char_table_range):
 * chartab.c (map_char_table):
 * chartab.c (syms_of_chartab):
 * chartab.c (complex_vars_of_chartab):
 * chartab.h:
 * chartab.h (CHARTAB_LEVELS):
 * chartab.h (enum char_table_type):
 * chartab.h (CHAR_TABLE_CATEGORY_P):
 * chartab.h (enum chartab_range_type):
 * compiler.h:
 * config.h.in:
 * console-msw-impl.h (struct mswindows_frame):
 * console-msw-impl.h (FRAME_MSWINDOWS_CURSOR_X):
 * console-msw-impl.h (CHECK_MSWINDOWS_FRAME):
 * console-msw.h:
 * console-stream.c (stream_text_width):
 * depend (mule-ccl.o):
 * device-x.c:
 * device-x.c (coding_system_of_xrm_database):
 * device-x.c (x_init_device):
 * device-x.c (syms_of_device_x):
 * device.c (allocate_device):
 * devslots.h (MARKED_SLOT):
 * editfns.c (Ftranslate_region):
 * emacs.c (main_1):
 * emacs.c (main):
 * event-Xt.c (x_keysym_to_character):
 * event-msw.c (mswindows_wnd_proc):
 * events.c (character_to_event):
 * events.h:
 * events.h (struct Lisp_Key_Data):
 * faces.c:
 * faces.c (syms_of_faces):
 * faces.c (complex_vars_of_faces):
 * file-coding.c:
 * file-coding.c (make_coding_system_1):
 * file-coding.c (no_conversion_encode):
 * file-coding.c (complex_vars_of_file_coding):
 * file-coding.h:
 * fileio.c (a_write):
 * fontcolor-gtk.c (console_type_create_fontcolor_gtk):
 * fontcolor-gtk.c (vars_of_fontcolor_gtk):
 * fontcolor-msw.c:
 * fontcolor-msw.c (console_type_create_fontcolor_mswindows):
 * fontcolor-msw.c (reinit_vars_of_fontcolor_mswindows):
 * fontcolor-msw.c (vars_of_fontcolor_mswindows):
 * fontcolor-tty.c:
 * fontcolor-tty.c (tty_initialize_font_instance):
 * fontcolor-tty.c (console_type_create_fontcolor_tty):
 * fontcolor-tty.c (vars_of_fontcolor_tty):
 * fontcolor-x.c (console_type_create_fontcolor_x):
 * fontcolor-x.c (vars_of_fontcolor_x):
 * fontcolor-xlike-inc.c:
 * fontcolor.c:
 * fontcolor.c (font_instantiate):
 * fontcolor.c (specifier_type_create_fontcolor):
 * fontcolor.c (reinit_specifier_type_create_fontcolor):
 * frame-x.c (x_set_frame_text_value):
 * insdel.c (GAP_CAN_HOLD_SIZE_P):
 * insdel.c (buffer_insert_string_1):
 * insdel.c (buffer_delete_range):
 * insdel.c (buffer_replace_char):
 * insdel.c (init_buffer_text):
 * intl-win32.c:
 * intl-win32.c (lcid_to_locale_mule_or_no):
 * intl-win32.c (determine_code_page):
 * intl-win32.c (mswindows_multibyte_to_unicode_putprop):
 * intl-win32.c (syms_of_intl_win32):
 * intl-win32.c (vars_of_intl_win32):
 * intl-win32.c (complex_vars_of_intl_win32):
 * intl-win32.c (init_intl_win32):
 * intl-x.c:
 * intl-x.c (init_x_locale):
 * intl.c (vars_of_intl):
 * keymap.c (Ftext_char_description):
 * lisp.h:
 * lstream.h:
 * make-src-depend (PrintPatternDeps):
 * redisplay-msw.c (mswindows_output_cursor):
 * redisplay-msw.c (mswindows_output_display_block):
 * redisplay-x.c:
 * redisplay-x.c (separate_textual_runs_xft_mule):
 * redisplay-x.c (separate_textual_runs):
 * redisplay-xlike-inc.c:
 * redisplay-xlike-inc.c (XLIKE_output_display_block):
 * regex.c:
 * regex.c (enum):
 * regex.c (print_partial_compiled_pattern):
 * regex.c (re_error_msgid):
 * regex.c (re_wctype_to_bit):
 * regex.c (regex_compile):
 * regex.c (compile_char_class):
 * regex.c (re_compile_fastmap):
 * regex.c (re_search_2):
 * regex.c (re_match_2_internal):
 * regex.h (RE_LISP_CONTEXT_ARGS):
 * regex.h (enum):
 * search.c:
 * search.c (byte_scan_buffer):
 * search.c (byte_find_next_ichar_in_string):
 * search.c (trivial_regexp_p):
 * search.c (search_buffer):
 * search.c (boyer_moore):
 * select-x.c (hack_motif_clipboard_selection):
 * select-x.c (Fx_store_cutbuffer_internal):
 * select-xlike-inc.c (lisp_data_to_selection_data):
 * select.c (Fown_selection_internal):
 * select.c (Fget_selection_internal):
 * specifier.c (specifier_instance_from_inst_list):
 * syntax.c:
 * syntax.c (scan_words):
 * syntax.h:
 * sysdep.c (qxe_readdir):
 * sysdep.c (qxe_closedir):
 * tests.c (Ftest_data_format_conversion):
 * tests.c (DFC_CHECK_DATA_COND_MULE):
 * text.c:
 * text.c (round_up_to_valid_ichar):
 * text.c (round_down_to_valid_ichar):
 * text.c (copy_text_between_formats):
 * text.c (dfc_convert_to_external_format):
 * text.c (dfc_convert_to_internal_format):
 * text.c (internal_to_external_charset_codepoint):
 * text.c (get_external_charset_codepoint):
 * text.c (reinit_vars_of_text):
 * text.c (vars_of_text):
 * text.h:
 * unicode.c:
 * unicode.c (unicode_encode):
 * unicode.c (syms_of_unicode):
 * unicode.c (complex_vars_of_unicode):
 * unicode.c (init_unicode):
 * unicode.h:
 * win32.c (mswindows_lisp_error_1):
 * xemacs.def.in.in:
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * fileio.c (Fwrite_region_internal):
 Increase the buffer size within this function, speeding up
 autosave of large files significantly in my testing.
 * fileio.c (Fdo_auto_save):
 GCPRO around calling auto save handlers in a more idiomatic way,
 that also avoids issues with Lisp code from echo_area_message().
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * elhash.c:
 Make obarray larger by default given that its htentries will leak
 on resizing after pdump_load().
 * symbols.c:
 OBARRAY_SIZE hasn't be used in this file since 2016, remove it.
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * symbols.c (value_slot_past_magic):
 Fix a very old bug in this function, don't check whether
 *store_pointer is SYMBOL_VALUE_LISP_MAGIC_P() and then access the
 SHADOWED field of SYM, which cannot be SYMBOL_VALUE_LISP_MAGIC_P,
 since we know it is a symbol, a distinct type.
2025年02月02日 Aidan Kehoe <kehoea@parhasard.net>
 * cmds.c (Fself_insert_internal): Removed. Moved to cmdloop.el.
 * cmds.c (syms_of_cmds):
 Remove its DEFSUBR().
2025年02月01日 Aidan Kehoe <kehoea@parhasard.net>
 Suppress some warnings provoked in emacs.c, 64-bit native
 Windows.
 * emacs.c:
 * emacs.c (make_argc_argv):
 Correct the type of ARGV in this, Extbyte *** rather than Wexttext
 ***, it is not used in Windows so the T string ambiguity never
 arose.
 Check the length of the list fits in a C int before
 casting. Adjust types in the body of the function.
 * emacs.c (free_argc_argv):
 Correct the type of ARGV in this.
 * emacs.c (argmatch):
 Modernise the declaration of this. Take MINLEN as a Charcount as
 works best with the body of the function.
 * emacs.c (SHEBANG_PROGNAME_LENGTH):
 No longer cast this to int, since we are comparing it to the
 result of wext_strlen(), a size_t.
 * emacs.c (main_1):
 When converting the windows termination handle to a HANDLE, use
 strotoll if we're running on 64-bit Windows.
 * emacs.c (Fkill_emacs):
 Cast XFIXNUM (arg) to int for standards compliance with C.
 * lisp.h:
 Update declaration of make_argc_argv(), free_argc_argv().
 * text.h (wext_strtoll):
 New #define.
2025年02月01日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h:
 * number.h (DEFINE_C_INTEGER_TYPE_LISP_CONVERSION):
 Suppress a couple of warnings provoked in headers, 64-bit native
 Windows.
2025年01月27日 Aidan Kehoe <kehoea@parhasard.net>
 * s/windowsnt.h:
 If we have Visual Studio 2015 or newer, #define HAVE_SNPRINTF and
 HAVE_VSNPRINTF as is appropriate.
2025年01月23日 Aidan Kehoe <kehoea@parhasard.net>
 Rename various C variables that reflect Fixnums from Vfoo_bar_baz
 to foo_bar_baz. I had introduced them all and it was misleading,
 suggesting that they were Lisp objects.
 * alloc.c:
 * alloc.c (vars_of_alloc):
 * bytecode.c (UNUSED):
 * data.c:
 * data.c (vars_of_data):
 * eval.c:
 * eval.c (bind_multiple_value_limits):
 * eval.c (Fmultiple_value_call):
 * event-Xt.c:
 * event-Xt.c (x_event_to_emacs_event):
 * event-Xt.c (vars_of_event_Xt):
 * gc.c:
 * lisp.h:
 * text.c:
 * text.c (vars_of_text):
2025年01月23日 Aidan Kehoe <kehoea@parhasard.net>
 Declare all those C variables for which DEFVAR_BOOL() or
 DEFVAR_CONST_BOOL() are used, as type Boolint. Generally a good
 idea, and done in preparation for further changes.
 * gc.c:
 * gc.c (vars_of_gc):
 Remove a duplicate DEFVAR_BOOL() for purify_flag, already done in
 alloc.c. 
 * alloc.c:
 * alloc.c (vars_of_alloc):
 Remove some incorrect information regarding purify_flag.
 
 * abbrev.c:
 * buffer.c:
 * bytecode.c:
 * bytecode.c (meter_code):
 * console-x.c:
 * console-x.c (x_initially_selected_for_input):
 * data.c:
 * data.c (eq_with_ebola_notice):
 * dired-msw.c:
 * editfns.c:
 * emacs.c:
 * emodules.c:
 * eval.c:
 * event-Xt.c:
 * event-gtk.c:
 * event-msw.c:
 * event-stream.c:
 * extents.c:
 * file-coding.c:
 * fileio.c:
 * filelock.c:
 * fontcolor-x.c:
 * frame.c:
 * glyphs.c:
 * lread.c:
 * menubar.c:
 * minibuf.c:
 * process.c:
 * redisplay.c:
 * redisplay.c (WINDOW_SCROLLED):
 * select-x.c:
 * symbols.c:
 * syntax.c:
 * window.c:
 Update declarations as above.
2025年01月20日 Aidan Kehoe <kehoea@parhasard.net>
 * emacs.c (main_1):
 Consolidate a couple of blocks to be called after successful
 pdump_load() for clarity.
2025年01月20日 Aidan Kehoe <kehoea@parhasard.net>
 Remove init_alloc_early(), which was basically empty.
 Move the error-checking code that was in it to
 common_init_alloc_early().
 Delegate much of what was in common_init_alloc_early() to the C
 implementation.
 * alloc.c:
 * alloc.c (Error_Behavior ERROR_ME, ERROR_ME_NOT, ERROR_ME_WARN,
 ERROR_ME_DEBUG_WARN): Initialize these statically.
 * alloc.c (init_alloc_early): Removed.
 * alloc.c (common_init_alloc_early):
 Remove initialization of various integers to zero, done by the C
 implementation anyway.
 staticpros_nodump is going to be zero at the point this is called,
 no need to check.
 * emacs.c (main_1):
 No longer call init_alloc_early().
 * symsinit.h:
 Remove its declaration.
2025年01月20日 Aidan Kehoe <kehoea@parhasard.net>
 init_eistring_once_early(), reinit_eistring_once_early() can be
 delegated to the C implementation, do that.
 * emacs.c (main_1):
 Don't call init_eistring_once_early() or reinit_eistring_early()
 in this function.
 Merge two blocks that are guarded by if (!initialized) for
 clarity.
 * symsinit.h:
 Remove the declarations of init_eistring_once_early(),
 reinit_eistring_once_early().
 * text.c (Eistring the_eistring_malloc_zero_init): Give this a
 static initialization with mallocp_ equal to one.
 Trust the C implementation to initialize the_eistring_zero_init to
 all zeroes.
 * text.c (reinit_eistring_early): Removed.
 * text.c (init_eistring_once_early): Removed.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Remove reinit_opaque_early(); all it does is creates a free list
 of Lisp_Opaque_Ptrs, something alloc.c will do automatically
 anyway.
 * emacs.c (main_1):
 Remove call to reinit_opaque_early() from here.
 * opaque.c:
 * opaque.c (make_opaque_ptr):
 Allocate the opaque_ptr using ALLOC_NORMAL_LISP_OBJECT(), which
 ultimately calls alloc_managed_lcrecord on a free list created on
 the fly anyway.
 * opaque.c (free_opaque_ptr):
 Call free_normal_lisp_object() here, which ultimately calls
 free_managed_lcrecord() anyway.
 * symsinit.h:
 Remove the declaration for reinit_opaque_early().
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Move the call to fatal() when a window system was specified that
 we don't support, to check_compatibile_window_system().
 * emacs.c (check_compatible_window_system):
 Check MUST against an array of supported window systems, die if it
 is not encountered.
 * emacs.c (main_1):
 Remove separate explicit calls to fatal() from main_1().
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Remove a couple of guards around catching signals that are irrelevant
 with PDUMP and are likely to cause problems with
 #'run-emacs-from-temacs.
 * data.c (init_data_very_early):
 * signal.c (init_signals_very_early):
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Move compute_memusage_stats_length() to
 disksave_object_finalization() from reinit_vars_of_alloc(), since
 it can be done at dump time once all the object types have been
 initialized.
 This means that reinit_vars_of_alloc() is now empty, remove it.
 Allocate lrecord_stats_metadata on the heap, dump it using
 dump_add_root_block_ptr(), so at pdump_load() it's just a pointer
 being set rather than copying the block to BSS.
 * alloc.c (disksave_object_finalization):
 Call compute_memusage_stats_length() here.
 * alloc.c (reinit_vars_of_alloc): Removed.
 * alloc.c (init_alloc_once_early): Add lrecord_stats_metadata to
 the dump file #ifdef MEMORY_USAGE_STATS.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Move the Lstream_implementation object to the dump file, avoiding
 the need to explicitly re-initialize their methods post
 pdump_load ().
 * emacs.c (main_1):
 Remove creation of the lstream types from this block that dealt
 with post-pdump_load() call. Now the block is empty, remove it
 entirely.
 * event-msw.c (init_slurp_stream): Removed.
 * event-msw.c (init_shove_stream): Removed.
 * event-msw.c (init_winsock_stream): Removed. 
 * event-msw.c (vars_of_event_mswindows):
 Move DEFINE_LSTREAM_IMPLEMENTATION() for the various
 mswindows-specific lstream types to this function. Move the
 LSTREAM_HAS_METHOD() calls here too.
 * file-coding.c (lstream_type_create_file_coding): Removed.
 * file-coding.c (vars_of_file_coding):
 Move DEFINE_LSTREAM_IMPLEMENTATION() for the coding lstream to
 this function. Move the LSTREAM_HAS_METHOD() calls here too.
 * lstream.c:
 * lstream.c (lstream_type_create): Removed.
 * lstream.c (vars_of_lstream):
 Move DEFINE_LSTREAM_IMPLEMENTATION() for the various other lstream
 types to this function. Move the LSTREAM_HAS_METHOD() calls here
 too.
 * lstream.h:
 * lstream.h (DEFINE_LSTREAM_IMPLEMENTATION):
 * lstream.h (DEFINE_LSTREAM_IMPLEMENTATION_WITH_DATA):
 Revise this to xnew_and_zero() the Lstream implementation (rather
 than having it in the C data segment), and to make it known to the
 dump file.
 * lstream.h (DECLARE_LSTREAM): Declare an Lstream as a pointer
 rather than an array.
 Make lstream_implementation_description available to
 file-coding.c, event-msw.c.
 * symsinit.h:
 Remove declarations for functions to initialize the lstreams post
 pdump_load(), no longer needed.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 * emacs.c (main_1):
 the_structure_type_dynarr in lread.c is dumped, there is no value
 to reiniting the structure types after pdump_load(), avoid this.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 There's no actual need for the various init_gc_* functions, remove
 them.
 * emacs.c (main_1):
 Remove calls to init_gc_early (), init_gc_once_early(),
 reinit_gc_early(), not needed.
 Examine GC_CONS_THRESHOLD rather than ALWAYS_GC if ERROR_CHECK_GC
 and deciding whether to GC after calling the complex_vars_of()
 functions.
 * gc.c (int always_gc): Removed.
 Remove ALWAYS_GC, equivalent to setting gc-cons-threshold to -1,
 not visible to Lisp.
 * gc.c (recompute_need_to_garbage_collect):
 No longer check it in this function.
 * gc.c (show_gc_cursor_and_message): Update a comment now
 always_gc is gone.
 * gc.c (common_init_gc_early): Removed.
 This did various things that are better done by the portable
 dumper and by the C implementation.
 * gc.c (vars_of_gc): Trust the portable dumper to preserve
 gc_cons_percentage, gc_cons_threshold, Vgc_message.
 * gc.h:
 Remove the declarations for the various init_gc functions.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Remove the need to call init_lcrecord_lists after pdump_load(),
 just set a pointer into the dumped data instead, simplifying
 startup a little. Remove the initialization of
 lrecord_implementations_tablet to all zeroes, trust the C
 implementation to do that.
 * alloc.c (Vall_lcrecord_lists): New variable, a Lisp vector whose
 storage is to be used post pdump_load() for all_lcrecord_lists.
 * alloc.c (init_lcrecord_lists): Removed.
 * alloc.c (reinit_alloc_early):
 Just set all_lcrecord_lists to the vector data of
 Vall_lcrecord_lists, which is already garbage protected. Don't
 call init_lcrecord_lists().
 * alloc.c (init_alloc_once_early):
 During loadup initialize all_lcrecord_lists using xnew_array, move
 the former body of init_lcrecord_lists into this function.
 Initialize and staticpro() Vall_lcrecord_lists once vector objects
 are available.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 * lstream.h (DECLARE_STACK_FIXED_BUFFER_LSTREAM):
 When declaring the Lisp_Object, initialize it to Qunbound,
 suppressing a compiler warning about a pointer to uninitialized
 data and provoking a more predictable error if we attempt to write
 to the stream before it's initialized.
 * lstream.h (INIT_STACK_FIXED_BUFFER_OUTPUT_STREAM):
 Do the initialization of the Lisp_Object to the stack lstream here.
2025年01月22日 Aidan Kehoe <kehoea@parhasard.net>
 Quiet various warnings when compiling on OpenBSD. Use snprintf()
 instead of sprintf() if available.
 Avoid strcpy(), strcat() since they don't do bounds checking, use
 emacs_printf_ascbyte instead.
 * alloc.c (pluralize_word):
 Be more careful about bounds checking in this function. Return the
 new length of the pluralized word.
 * alloc.c (pluralize_and_append):
 Use emacs_snprintf_ascbyte() instead of strcpy(), strcat(). Take
 BUFSIZE as an argument.
 * alloc.c (object_memory_usage_stats):
 Pass the buffer size to pluralize_and_append().
 * emacs.c:
 * emacs.c (assert_equal_failed):
 Use snprintf() if available. Inappropriate to use emacs_snprintf()
 when things are in an inconsistent state with XEmacs crashing.
 * event-Xt.c (x_reset_modifier_mapping):
 Document why I don't plan to remove a call to XKeycodeToKeysym().
2025年01月21日 Aidan Kehoe <kehoea@parhasard.net>
 Avoid calling various functions that require a working redisplay
 when the current window is on a stream device. Thank you for the
 bug report, Ulrich Müller.
 * window.h: Declare redisplayable_window_p() here.
 * indent.c (vmotion): Use it, don't attempt to scroll if redisplay
 infrastructure not available.
 * indent.c (vertical_motion_1): Use it, ditto.
 * window.c:
 * window.c (redisplayable_window_p): New. 
 * window.c (Fpos_visible_in_window_p):
 Return Qnil early if this is a window on a stream device.
 * window.c (Fwindow_end):
 Just return w->end_pos if WINDOW is on a stream device.
 * window.c (Fdelete_other_windows):
 Don't attempt to scroll if WINDOW is on a stream device.
 * window.c (window_scroll): Ditto.
 * window.c (Fcenter_to_window_line):
 Ditto.
 * window.c (get_current_pixel_pos):
 Return 0 if this window does not have an associated display
 buffer, rather than crashing.
 * window.c (Fcurrent_pixel_column): Call decode_window()
 appropriately in here.
 * window.c (Fcurrent_pixel_row): Ditto.
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Move OBJECT_HAS_METHOD() calls to immediately follow
 INIT_LISP_OBJECT(), for clarity and to improve simplicity of
 startup (since many of the reinit_*_early() and *_objects_create()
 functions are no longer needed).
 * alloc.c (reinit_alloc_objects_early): Removed. Calls moved to
 init_alloc_once_early().
 * alloc.c (init_alloc_once_early):
 Call OBJECT_HAS_METHOD in this function
 * buffer.c (buffer_objects_create): Removed.
 * buffer.c (syms_of_buffer): Move its contents to this function,
 beside INIT_LISP_OBJECT().
 * bytecode.c (bytecode_objects_create): Removed.
 * bytecode.c (syms_of_bytecode): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * casetab.c (casetab_objects_create): Removed.
 * casetab.c (syms_of_casetab): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * chartab.c (chartab_objects_create): Removed.
 * chartab.c (syms_of_chartab): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * elhash.c:
 * elhash.c (hash_table_objects_create): Removed.
 * elhash.c (init_elhash_once_early): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * emacs.c (main_1):
 Remove calls to functions that are now no longer needed.
 * extents.c (extents_objects_create): Removed.
 * extents.c (syms_of_extents): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * faces.c (faces_objects_create): Removed.
 * faces.c (syms_of_faces): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * frame.c (frame_objects_create): Removed.
 * frame.c (init_frame): Correct some style here in passing.
 * frame.c (syms_of_frame): Move the contents of
 frame_object_create() to this function, beside INIT_LISP_OBJECT().
 * glyphs.c (glyphs_objects_create): Removed.
 * glyphs.c (syms_of_glyphs): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * lstream.c (lstream_objects_create): Removed.
 * lstream.c (syms_of_lstream): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * mule-charset.c (mule_charset_objects_create): Removed.
 * mule-charset.c (syms_of_mule_charset): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * process.c (reinit_process_early): Removed.
 * process.c (syms_of_process): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * rangetab.c:
 * rangetab.c (rangetab_objects_create): Removed.
 * rangetab.c (syms_of_rangetab): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * scrollbar.c (scrollbar_objects_create): Removed.
 * scrollbar.c (syms_of_scrollbar): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * specifier.c (specifier_objects_create): Removed.
 * specifier.c (syms_of_specifier): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * symbols.c: Remove the OBARRAY_SIZE #define in passing, no longer
 used in this file.
 * symbols.c (reinit_symbol_objects_early): Removed.
 * symbols.c (init_symbols_once_early): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * symsinit.h:
 Remove declarations for all the *_object_create() functions, no
 longer needed.
 * ui-gtk.c (ui_gtk_objects_create): Removed.
 * ui-gtk.c (syms_of_ui_gtk): Move its contents to this
 function, beside INIT_LISP_OBJECT().
 * window.c (window_objects_create): Removed.
 * window.c (syms_of_window): Move its contents to this
 function, beside INIT_LISP_OBJECT().
2025年01月19日 Aidan Kehoe <kehoea@parhasard.net>
 Initialize the event stream objects using C macros, for symmetry,
 consistency with the specifier objects.
 * events.h:
 * events.h (struct event_stream):
 Rename the event_pending_p field of this to event_pending_p_cb,
 for symmetry with all the other fields.
 * events.h (DEFINE_EVENT_STREAM): New macro.
 Allocate an event stream object with xnew_and_zero(), and make the
 portable dumper aware of it.
 
 * events.h (EVENT_STREAM_HAS_METHOD): New macro, initialize a
 given method for an event stream.
 * events.h (HAS_EVENT_STREAM_METHOD_P): New macro, return non-zero
 if an event stream has a given method.
 * gpmevent.c (hook_event_callbacks_once):
 Adjust this given the new name for event_pending_p().
 * gpmevent.c (vars_of_gpmevent):
 Fix this in passing, staticpro() already does
 dump_add_root_lisp_object(), no need to do that explicitly.
 * event-Xt.c:
 * event-Xt.c (vars_of_event_Xt):
 Use the macros to initialize the event stream.
 * event-gtk.c:
 * event-gtk.c (vars_of_event_gtk):
 Use the macros to initialize the event stream.
 * event-msw.c:
 * event-msw.c (vars_of_event_mswindows):
 Use the macros to initialize the event stream.
 * event-stream.c:
 Adjust event_stream_description_1 to reflect the new name for the
 event_pending_p method.
 * event-stream.c (event_stream_event_pending_p):
 Adjust this function to reflect the new name for the
 event_pending_p method.
 * event-stream.c (event_stream_force_event_pending):
 Use HAVE_EVENT_STREAM_METHOD_P in this.
 * event-stream.c (event_stream_drain_queue):
 Ditto.
 * event-stream.c (Faccept_process_output):
 Update a comment here.
 * event-tty.c:
 * event-tty.c (vars_of_event_tty):
 Use the macros to initialize the event stream.
2025年01月18日 Aidan Kehoe <kehoea@parhasard.net>
 * device-gtk.c (gtk_init_device):
 Add a comment regarding a deprecated function which should stay.
 * device-gtk.c (Fgtk_keysym_on_keyboard_p):
 Use decode_gtk_device() rather than re-implementing it.
 * device-gtk.c (Fgtk_style_info):
 Ditto.
 * menubar-gtk.c:
 * menubar-gtk.c (menu_name_to_accelerator):
 Revise this to take a Lisp string, to respect our internal
 encoding, and to use our case infrastructure.
 * menubar-gtk.c (menu_convert):
 Move a statement after the declarations.
 * menubar-gtk.c (menu_descriptor_to_widget_1):
 Call menu_name_to_accelerator with its new calling convention.
 * menubar-gtk.c (menu_create_menubar):
 Don't call gtk_widget_set_name() on ITEM before checking ITEM is
 non-NULL
 * toolbar-gtk.c (init_gtk_toolbar_stock_icons):
 Call make_lisp_hash_table() explicitly rather than call0 (intern
 ("make-hash-table")).
2025年01月18日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c:
 Move the declarations for Qzero, Qone, Qnull_pointer to this file
 (on union builds).
 * alloc.c (common_init_alloc_early):
 Move there initialization from here to init_alloc_once_early().
 * alloc.c (init_alloc_once_early):
 Initialize Qzero, Qone here, make them known to the portable dumper.
 * symbols.c:
 Move the declarations for Qzero, Qone, Qnull_pointer from this
 file, they're used far earlier in alloc.c, and they're not symbols
 in any event.
2025年01月18日 Aidan Kehoe <kehoea@parhasard.net>
 Move the event_stream and process_methods structures to the dump
 file, no need to explicitly initialize them post pdump-load.
 Similarly for filedesc_with_input, event-Xt.c.
 Declare filedesc_to_what_closure as an array in BSS, trust that
 C will initialize it to all zeroes.
 * event-Xt.c:
 * event-Xt.c (init_what_input_once) Removed. Leave this to the
 portable dumper and to the C implementation.
 * event-Xt.c (mark_what_as_being_ready):
 Access Vfiledesc_with_input as a Lisp vector.
 * event-Xt.c (unselect_filedesc): Ditto. 
 * event-Xt.c (Xt_process_to_emacs_event): Ditto.
 * event-Xt.c (Xt_tty_to_emacs_event): Ditto.
 * event-Xt.c (reinit_vars_of_event_Xt):
 Move creation of the struct event_stream to vars_of_event_Xt(),
 trust pdump_load() to restore it.
 * event-Xt.c (vars_of_event_Xt):
 Initialize Vfiledesc_with_input as a Lisp vector. Make it
 reachable for GC pre-dump, but unreachable for GC after
 pdump_load(), since it is usually 1024 in length and full of
 either Qnil or process objects that are reachable from
 Vprocess_list.
 Trust the C runtime to initialize filedesc_to_what_closure[] to all
 zeroes.
 * event-gtk.c:
 * event-gtk.c (mark_what_as_being_ready):
 * event-gtk.c (unselect_filedesc):
 * event-gtk.c (gtk_process_to_emacs_event):
 * event-gtk.c (gtk_tty_to_emacs_event):
 * event-gtk.c (reinit_vars_of_event_gtk):
 * event-gtk.c (vars_of_event_gtk):
 Exactly the same changes as for event-Xt.c, basically identical code.
 * event-msw.c (reinit_vars_of_event_mswindows):
 Move initializing the event stream object to
 vars_of_event_mswindows. Trust the C runtime to initialize
 mswindows_pending_timers_count, dde_eval_pending to 0, since
 they're in BSS.
 * event-msw.c (vars_of_event_mswindows):
 Initialize the event stream object here. Dump it, let pdump_load()
 restore it in the normal way.
 * event-stream.c:
 * event-stream.c (const struct sized_memory_description
 event_stream_description): New. Describe a struct event_stream for
 the sake of the portable dumper. Used by event-Xt.c, event-msw.c,
 event-tty.c.
 * event-tty.c:
 * event-tty.c (reinit_vars_of_event_tty): Make this empty.
 * event-tty.c (vars_of_event_tty):
 Initialize the event stream object here. Dump it, let pdump_load()
 restore it in the normal way.
 * events.h: Declare event_stream_description.
 * process-nt.c (process_type_create_nt): Remove this, move it into
 vars_of_process_nt().
 * process-nt.c (vars_of_process_nt): Initialize the process
 methods in this function.
 * process-unix.c:
 * process-nt.c (process_type_create_unix): Remove this, move it into
 vars_of_process_unix().
 * process-unix.c (vars_of_process_unix):
 Initialize the process methods in this function.
 * process.c (static const struct memory_description
 process_methods_description): New.
 * process.c (vars_of_process): Tell the portable dumper about the
 process methods, don't restore them explicitly.
2025年01月16日 Aidan Kehoe <kehoea@parhasard.net>
 Rearrange main_1() to avoid the need to save and restore values
 before and after loading the dump file.
 * emacs.c:
 Remove a comment cautioning about this issue.
 * emacs.c (main_1):
 Remove some SCO-specific code that has long been #ifdefed out.
 Handle the -mswindows-termination-handle command line argument
 first, since it's needed for debugging and it's not visible to
 Lisp.
 Next handle -nd (needed to decide on whether to load the dump
 file) and -sd (which immediately exits).
 Then load the dump file. Only after that, process the remaining
 command line arguments, overriding the restored Lisp-visible
 variables as appropriate.
 * emacs.c (standard_args):
 Remove -nuni from this, which option has been obsolete since Win95
 support was removed.
 Re-order the structure to reflect changed order of processing in
 main_1().
 * emacs.c (main):
 Correct a comment here.
2025年01月27日 Aidan Kehoe <kehoea@parhasard.net>
 * syswindows.h:
 Remove declarations for functions provided in ntheap.c, which had
 been used for unexec on that platform.
 * vm-limit.c:
 Don't attempt to provide malloc warnings if on win32_native, given
 we no longer provide gmalloc.o so this won't work, and we have
 removed the functions that give information on the data limits.
 * vm-limit.c (check_memory_limits):
 Remove long obsolete code that checks if pointers exceed the size
 available to Lisp for pointers, which never happens with the
 current implementation.
 * s/cygwin-common.h:
 Remove #defines for TEXT_START and HEAP_IN_DATA.
 * s/gnu.h:
 Remove #define for UNEXEC, no longer needed.
 * s/linux.h:
 Ditto. Remove #define for UNEXEC_USE_MAP_PRIVATE, no longer
 needed.
 Remove #defines for A_TEXT_OFFSET, A_TEXT_SEEK,
 ADJUST_EXEC_HEADER. Remove #define for SYSTEM_MALLOC, now
 obligatory.
 * s/mingw32.h:
 Remove #defines for TEXT_START, HEAP_IN_DATA, UNEXEC, no longer
 needed.
 * s/mingw32.h (OBJECTS_SYSTEM): Remove ntheap.o from this.
 * s/netbsd.h:
 Remove #defines for UNEXEC, HAVE_TEXT_START, A_TEXT_OFFSET,
 A_TEXT_SEEK from this file, no longer needed.
 * s/sol2.h: Remove #define for UNEXEC from this file, no longer
 needed.
 * s/usg5-4.h:
 Remove #define for ADDR_CORRECT from this file, no longer needed.
 * mem-limits.h:
 * mem-limits.h (get_lim_data): Remove the implementation of this
 for WIN32_NATIVE, no longer relevant.
 * nt.c (init_mswindows_environment):
 Remove a call to cache_system_info(), no longer needed now unexec
 is gone.
 * ntheap.c: Remove this file, which implemented unexec on
 WIN32_NATIVE. 
 * m/alpha.h (DATA_START):
 Remove #defines for TEXT_START, HEAP_IN_DATA, no longer needed.
 * m/arm.h:
 Remove #defines for TEXT_START, DATA_START, NO_REMAP, no longer
 needed.
 * m/hp800.h:
 Remove #defines for TEXT_START, DATA_START, NO_REMAP, UNEXEC, no
 longer needed.
 * m/ibmrs6000.h:
 Remove #defines for A_TEXT_OFFSET, ADDR_CORRECT, TEXT_START,
 DATA_START, UNEXEC, no longer needed.
 * m/intel386.h:
 Remove #defines for TEXT_START, NO_REMAP, no longer needed.
 
 * m/m68k.h:
 Remove #defines for TEXT_START, NO_REMAP, no longer needed.
 * m/mips.h:
 Remove #defines for TEXT_START, DATA_START, NO_REMAP, no longer needed.
 * m/powerpc.h:
 Remove #defines for NO_REMAP, ADDR_CORRECT and a couple more, no
 longer needed in absence of unexec.
 * m/sparc.h:
 Remove #defines for A_TEXT_OFFSET, A_TEXT_SEEK, no longer needed.
 * m/template.h (LOAD_AVE_CVT):
 * m/windowsnt.h:
 Remove #define for DATA_START, no longer needed.
 * Makefile.in.in ($(DUMP_TARGET)): Remove some code bracketed in
 #ifdef HEAP_IN_DATA, no longer needed with removal of unexec.
 * config.h.in:
 Remove the #define for SYSTEM_MALLOC, always on so not needed.
 Update comment regarding HAVE_MALLOC_WARNING, the glibc feature
 this relied on has been removed.
 * depend (ntheap.o): Remove entry for this.
 * emacs.c: Remove mention of ntheap.c
2025年01月24日 Aidan Kehoe <kehoea@parhasard.net>
 * redisplay.c:
 Declare force_valid_bytebpos_or_zero() before defining it in this
 file, suppress a warning.
 This should be used minimally (only other use is in scrollbar.c),
 intentionally not declared in a header.
2025年01月24日 Aidan Kehoe <kehoea@parhasard.net>
 Qnull_pointer breaks in the initialization of struct Lisp_Subr on
 Cygwin union builds, "initializer element is not constant." This
 is not rectified by declaring Qnull_pointer as const.
 Move DOC to the end of struct Lisp_Subr, just omit it in the DEFUN
 macro, which gives the same result (defined to be bitwise zero).
 This breaks binary compatibility with modules; however
 fb35ba719d24 of October did this recently anyway, and I plan
 further module bug fixes which should require bumping the module
 version number shortly. * lisp.h (struct Lisp_Subr): Rearrange
 this.
 Thank you for the bug report, Caj Svensson.
 * lisp.h DEFUN): Omit explicit initialization of Qnull_pointer.
 * lisp.h (DEFUN_NORETURN): Ditto.
2025年01月13日 Aidan Kehoe <kehoea@parhasard.net>
 * callint.c:
 * callint.c (Finteractive): Document limitations with string
 (interactive) specifications when writing code compatible with GNU
 Emacs.
 * callint.c (callint_prompt):
 Fix my bug in this, supply Qstring to the Fformat_into()
 call. Transform markers to integers as was previously done.
 * callint.c (Fcall_interactively):
 Clean up some cases within this, removed unneeded local variables
 for clarity.
2025年01月12日 Aidan Kehoe <kehoea@parhasard.net>
 * eval.c: (trace_out_and_die): Removed.
 * eval.c (signal_call_debugger):
 No longer call trace_out_and_die() on noninteractive debug builds,
 allow Lisp to override the debugger for the sake of testing.
2025年01月06日 Aidan Kehoe <kehoea@parhasard.net>
 * insdel.c (signal_before_change):
 * insdel.c (signal_after_change):
 Remove examination of before-change-function,
 after-change-function from these functions, only respect
 before-change-functions, after-change-functions, now we have
 symbol-value handlers in obsolete.el to make this possible.
2025年01月06日 Aidan Kehoe <kehoea@parhasard.net>
 Debug resize_string (), make its behaviour more uniform.
 * alloc.c:
 * alloc.c (resize_string):
 Define a couple of macros to make sure the string copying
 behaviour is the same for the various sizes encountered. Avoid
 corrupting the heap if shrinking a non-big string.
 * sequence.c (Fclear_string):
 Pass POS as -1 to resize_string here, since we are overwriting the
 whole thing.
 * sequence.c (concatenate): Adjust a comment here regarding
 resize_string().
2024年12月31日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h:
 * process.c:
 * process.c (syms_of_process):
 * tls.c:
 * tls.c (syms_of_tls):
 Make Qtls_error available and non-zero on non-TLS builds, given
 that we use this symbol in signalling an error when TLS support is
 unavailable.
2024年12月30日 Aidan Kehoe <kehoea@parhasard.net>
 * incbin.h:
 Specifying the type of the dumped data doesn't work with COFF
 output currently. This was already implemented for mingw,
 implement it for Cygwin too.
2024年12月27日 Aidan Kehoe <kehoea@parhasard.net>
 * abbrev.c (abbrev_obarray_has_blank_p):
 Modernise return type. Check OBARRAY is a hash table before
 calling oblookup() on it, avoid a (rare) crash. Thank you Henry
 S. Thompson.
 * abbrev.c (abbrev_match):
 Check TABLE is a hash table before calling elisp_maphash() on it.
 * abbrev.c (MATCHFUN):
 Check abbrev-start-location non-nil before calling
 abbrev_obarray_has_blank_p() in this macro.
2024年12月25日 Aidan Kehoe <kehoea@parhasard.net>
 * dumper.c (pdump_load):
 Avoid infinite loop when examining $PATH to find the XEmacs
 binary, --without-dump-in-exec.
2025年01月01日 Aidan Kehoe <kehoea@parhasard.net>
 * doc.c (extract_object_file_name):
 Revise this, no need for NAME_NONRELOC, NAME_RELOC as arguments,
 take DOC_POS as an OFF_T.
 * doc.c (unparesseuxify_doc_string):
 Revise this, POSITION needs to be an OFF_T.
 * doc.c (open_doc_file): New. Open a documentation file (either
 Vinternal_doc_file_name or one specified in FILEPOS), and return
 the associated file descriptor. Refactored from get_doc_string(),
 get_object_file_name(), adjusted to prefer DOC-DUMP-ID over pure
 DOC if looking in doc-directory.
 If we added DUMP_ID to the file name successfully, update
 Vinternal_doc_file_name to reflect this.
 * doc.c (get_doc_string): Use open_doc_file ().
 * doc.c (get_object_file_name): Use open_doc_file ().
 * doc.c (Fbuilt_in_symbol_file):
 No need to fret about the sign of DOC_OFFSET,
 get_object_file_name() now does that for us.
 * lisp.h:
 Update the declaration of unparesseuxify_doc_string() here. 
 * lread.c (pas_de_holgazan_ici):
 Adjust types, call to unparesseuxify_doc_string() here.
2025年01月01日 Aidan Kehoe <kehoea@parhasard.net>
 * number.h (DEFINE_C_INTEGER_TYPE_LISP_CONVERSION):
 Correct a misspelling in this macro.
2024年12月24日 Aidan Kehoe <kehoea@parhasard.net>
 * device-gtk.c (gtk_delete_device):
 * device-x.c (x_delete_device):
 * emacs.c:
 * emacs.c (Fdump_emacs):
 FREE_CHECKING is no longer available. It depended on a glibc
 feature that was removed, and is no longer even
 auto-detected. Remove all mention of it.
 
 * lisp.h: Remove declaration of Freally_free(), previously in
 free-hook.c.
2024年12月22日 Aidan Kehoe <kehoea@parhasard.net>
 * Makefile.in.in:
 * Makefile.in.in ($(RAW_EXE)):
 If the dump size is known and DUMP_IN_EXEC is defined, build
 temacs with a dumped_data full of zeroes that reflects that size.
 No longer binary-patch with ../lib-src/insert-data-in-exec,
 instead relink if the dump size known to temacs is identical to
 the current dump size.
 If the dump sizes differ, rebuild temacs with the new dump file
 size and re-dump.
 Echo so the user has an idea what is going on with this.
 * dump-data.c (dumped_data):
 Use Dale Weiler's INCBIN to inline the dumped ata.
 * dump-data.c (dumped_data_size): Revise this, use the
 dumped_size variable generated by INCBIN.
 * dump-data.c (dumped_data_get): Revise this, just use dumped_data
 (already appropriately aligned by INCBIN()).
 * dump-data.c (dumped_data_max_size): Removed, no longer needed.
 * dump-data.c (dumped_data_align_offset): Removed, no longer
 needed.
 * dump-data.h: Remove declarations of functions removed from
 dump-data.c.
 * emacs.c (main_1):
 Remove the -si / --show-inline-info argument, no longer needed.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 Remove lastfile.c, one more remnant of unexec, which makes revised
 handling of DUMP_IN_EXEC more difficult.
 * lastfile.c: Removed.
 * Makefile.in.in: Remove mention of lastfile.o from this.
 * depend (lastfile.o): Remove mention of lastfile.o from this.
 * emacs.c:
 Remove extern declaration of my_edata, no longer used.
 * emacs.c (Fdump_emacs):
 Ditto.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * dumper.c:
 #include "paths.h" here to allow a better-defined search for
 installed dump files.
 * dumper.c (pdump_align_table):
 Move the pdump_free function pointer inside the non-DUMP_IN_EXEC
 code.
 * dumper.c (DUMP_IN_EXEC): #define this to 1 on WIN32_NATIVE.
 * dumper.c (pdump_resource_get): New. Rename pdump_ram_try() to
 this on non-WIN32 builds for symmetry.
 * dumper.c (snprintf): Provide a very limited snprintf in this
 file for systems where it is not available.
 * dumper.c (pdump_file_try): Revise this to take a directory name
 and a file name, avoiding issues with shift_jis and multibyte
 characters that may have ASCII slash in them.
 Check in only two places for the dump file, either the directory
 the XEmacs executable was loaded from, or that configured at
 compile time (depending on PATH_EXEC, or PATH_PREFIX, or
 neither (just relative to where the XEmacs binary was found).
 * dumper.c (pdump_load):
 Make separate implementations of this for DUMP_IN_EXEC
 vs. non-DUMP_IN_EXEC.
 Have this take its argument as an Extbyte *, appropriate given no
 localisation available at this point of startup.
 Return a Boolint, a better type.
 For the non-DUMP_IN_EXEC implementation, handle the ambiguity of
 multibyte file names better by checking whether directories exist
 when there is a slash in argv[0].
 * dumper.h:
 Update the return type and argument type of pdump_load().
 * emacs.c:
 * emacs.c (Boolint inhibit_configured_paths): Make this available
 to other files, for the sake of pdump_load().
 * emacs.c (init_cmdargs):
 Remove the code to save initial_argc, initial_argv in passing, not
 used.
 * emacs.c (main_1):
 Cast the argument to pdump_load() as appropriate.
 * lisp.h:
 Declare inhibit_configured_paths here.
2024年12月20日 Aidan Kehoe <kehoea@parhasard.net>
 * s/windowsnt.h:
 Remove further unexec-specific code from this file.
2024年12月14日 Aidan Kehoe <kehoea@parhasard.net>
 * dired.c (file_name_completion):
 * fileio.c (Ffile_name_directory):
 * fileio.c (Fexpand_file_name):
 Remove long-unused code that checked the FILE_SYSTEM_CASE
 #define, superseded by #'file-system-ignore-case-p.
2024年12月17日 Aidan Kehoe <kehoea@parhasard.net>
 * toolbar.c: (Ftoolbar_button_p, Ftoolbar_specifier_p): Move these
 to Lisp.
 * toolbar.c (syms_of_toolbar):
 Remove the DEFSUBR()s from here.
2024年12月07日 Aidan Kehoe <kehoea@parhasard.net>
 On WIN32_NATIVE, given there is good native support for
 including the dump file in the executable, remove the support for
 loading it from an external file, avoid potential security issues
 stemming from loading this file which stores function pointers and
 thus should be regarded as having executable code.
 * dumper.c: (pdump_file_unmap): Remove the WIN32_NATIVE
 implementation of this.
 * dumper.c: (pdump_file_get): Remove the WIN32_NATIVE
 * dumper.c (pdump_resource_free):
 * dumper.c (pdump_file_try): Move this inside the non WIN32_NATIVE
 #ifdefs.
 * dumper.c (pdump_load):
 Adjust this function appropriately.
2024年12月02日 Aidan Kehoe <kehoea@parhasard.net>
 * number.c (internal_coerce_number):
 When converting a bignum to a fixnum, use bignum_to_emacs_int(),
 rather than bignum_to_long(), which will lose (more) data on
 certain platforms.
2024年12月01日 Aidan Kehoe <kehoea@parhasard.net>
 Get the native mswindows and Cygwin builds working once more.
 * device-msw.c (msprinter_reinit_device):
 Pass the FROM_IO_ERROR argument to
 msprinter_delete_device_internal().
 * device-msw.c (msprinter_delete_device):
 Take a FROM_IO_ERROR argument.
2024年11月21日 Aidan Kehoe <kehoea@parhasard.net>
 * incbin.h:
 Allow INCBIN_ALIGNMENT_INDEX to be specified explicitly and not
 auto-detected in this header.
2024年11月21日 Aidan Kehoe <kehoea@parhasard.net>
 * incbin.h: New. Import this header file, from Dave
 Weiler. Public domain, no licence issues.
 Include Dave's UNLICENSE.txt inline into the file.
2025年01月01日 Aidan Kehoe <kehoea@parhasard.net>
 * data.c:
 Move definition of Qunbound to opaque.c.
 * emacs.c (main_1):
 Call init_opaque_once_early () before init_symbols_once_early (),
 now the former creates Qunbound.
 * opaque.c:
 * opaque.c (init_opaque_once_early):
 Qunbound is now a zero-length Lisp_Opaque object, no longer a
 symbol-value-magic.
 * symbols.c:
 Update documentation, remove mention of SYMVAL_UNBOUND_MARKER.
 * symbols.c (do_symval_forwarding):
 Since Qunbound is no longer symbol-value-magic, this function just
 returns valcontents when Qunbound is encountered. This was also
 the behaviour previously, so the change is correct by inspection.
 * symbols.c (Fset):
 Qunbound is no longer symbol-value-magic, so 
 if (!SYMBOL_VALUE_MAGIC_P (valcontents) || UNBOUNDP (valcontents))
 just becomes
 if (!SYMBOL_VALUE_MAGIC_P (valcontents))
 behaviour is exactly the same by inspection.
 * symbols.c (default_value):
 Since Qunbound is no longer symbol-value-magic, this function just
 returns valcontents when Qunbound is encountered. This was also
 the behaviour previously, so the change is correct by inspection.
 * symbols.c (Fmake_variable_buffer_local)
 Since Qunbound is no longer symbol-value-magic, the condition of
 the if statement is 0, and the code after the if statement is
 executed. This was also the behaviour previously, since the case
 within the switch just break;ed out of the switch statement,
 change is correct by inspection.
 * symbols.c (Fmake_local_variable)
 Exactly the same reasoning applies as for
 Fmake_variable_buffer_local (), twice in this function.
 * symbols.c (Fbuilt_in_variable_type):
 This returns Qnil since Qunbound is no longer symbol-value-magic;
 this was also the behaviour previously, correct by inspection.
 * symbols.c (static const struct symbol_value_magic
 guts_of_unbound_marker): Removed. No longer needed.
 * symbols.c (init_symbols_once_early):
 Remove initialisation of Qunbound from here.
 * symeval.h (enum symbol_value_type):
 Remove SYMVAL_UNBOUND_MARKER from this, no longer needed.
2024年11月09日 Aidan Kehoe <kehoea@parhasard.net>
 Attempt to avoid XEmacs crashing if the X11 server has crashed and
 we have other devices and consoles to fall back to. Thank you,
 Henry S. Thompson.
 * console-impl.h (struct console_methods):
 New flag to delete_device_method, FROM_IO_ERROR.
 * device-gtk.c (gtk_delete_device):
 Update declaration, flag not used on GTK.
 * device-msw.c (mswindows_delete_device):
 Update declaration, flag not used on mswindows.
 * device-msw.c (msprinter_delete_device_internal):
 Update declaration, flag not used on msprinter.
 * device-tty.c (tty_delete_device):
 Update declaration, flag not used on tty.
 * device-x.c (x_delete_device):
 Use it, avoid crashing XEmacs within XFreeGC when the X11 device
 has crashed
 * device.c (delete_device_internal):
 Pass FROM_IO_ERROR to the delete device methods.
2024年11月03日 Aidan Kehoe <kehoea@parhasard.net>
 * dumper.c (pdump_load_finish):
 Correct a cast here, thank you Mats Lidell and the buildbot.
2024年11月03日 Aidan Kehoe <kehoea@parhasard.net>
 Add thorough support for address space layout randomization, ASLR,
 now needed for macOS with Apple Silicon. This gives a 1% slowdown
 on my testing with ASLR turned off, which is acceptable.
 Configure change to turn this on by default not yet done, for the
 sake of better hg bisect behaviour.
 * alloc.c:
 * alloc.c (lrecord_implementation_description): New.
 * alloc.c (lrecord_implementation_pointer_description): New.
 We can no longer just dump the lrecord_implementation table as an
 opaque block, given data segment pointers are relocated.
 Ditto for the staticpros.
 * alloc.c (c_data_pointer_description): New. Describe a pointer to
 something in the C data segment.
 * alloc.c (init_alloc_once_early):
 Call dump_add_root_block() on lrecord_implementations_table,
 lrecord_memory_descriptions in this file rather than in dumper.c.
 * console.c:
 Be much more thorough in console_methods_description_1, now
 function pointers need to be relocated at pdump_load().
 * console.c (console_type_create):
 Remove the dead console type from the list in a way that is more
 friendly to pdump.
 * dumper.c:
 * dumper.c (struct pdump_static_pointer):
 Make the types of the fields of this struct more correct.
 * dumper.c (struct pdump_header):
 Add entries for the address of known C function and C data
 segment values at dump-time, to allow proper calculation of
 offsets at run time.
 * dumper.c (pdump_register_sub):
 Handle XD_FUNCTION_POINTER, XD_DATA_POINTER within this.
 * dumper.c (pdump_store_new_pointer_offsets):
 Update the opening comment to this fairly thoroughly.
 Handle XD_FUNCTION_POINTER, XD_DATA_POINTER within this function.
 * dumper.c (pdump_reloc_c_func): New. Given a pointer to a C
 function stored at dump time, return a value reflecting the
 run-time environment.
 * dumper.c (pdump_reloc_c_data): New. Given a pointer to somewhere
 in the C data segment stored at dump time, return a value
 reflecting the run-time environment.
 * dumper.c (pdump_reloc_lisp_object): New. Given a Lisp_Object
 stored at dump time, if it is non-NULL pointer type, return a
 value reflecting the run time environment.
 * dumper.c (pdump_reloc_lisp_data): New. Given a non-Lisp_Object
 heap value stored at dump time, if it is non-NULL pointer, return
 a value reflecting the run time environment.
 * dumper.c (pdump_load_lispdesc_indirect_description): New. Like
 lispdesc_indirect_description, but handles pdump_load()-time
 relocation of C data pointers.
 * dumper.c (pdump_reloc_one): Update not to take DELTA explicitly,
 now there are three that need to be observed.
 * dumper.c (pdump_dump_root_block_ptrs): Update to reflect
 corrected types of struct pdump_static_pointer.
 * dumper.c (pdump):
 Update some comments. Move dumping of
 lrecord_implementations_table, lrecord_memory_descriptions to
 alloc. Save the address of Fcons, lisp_object_description to the
 header.
 * dumper.c (pdump_load_finish):
 Handle relocation of data segment pointers as well as heap
 pointers in this function.
 * elhash.c:
 Document there are two C function pointers stored in
 hash_table_test_description.
 * eval.c:
 Document there is a C function pointer and two ASCII strings
 stored in Lisp_Subr.
 * events.c:
 Document there is a C function pointer stored in
 struct Lisp_Magic_Eval_Data.
 * file-coding.c:
 Document there are two C function pointers stored in
 struct detector.
 Document there are many C function pointers stored in
 struct coding_system_methods.
 * gc.c:
 * gc.c (lispdesc_one_description_line_size):
 Handle XD_DATA_POINTER, XD_FUNCTION_POINTER here.
 Move lrecord_memory_descriptions to alloc.c
 * gc.c (kkcc_marking):
 Handle XD_DATA_POINTER, XD_FUNCTION_POINTER here.
 * glyphs.c:
 Document there is a C function pointer stored in Lisp_Glyph.
 Document there is a C function pointer stored in ii_keyword_entry.
 Document there are many C function pointers stored in
 struct image_instantiator_methods.
 * lisp.h:
 * lisp.h (struct Lisp_Subr):
 Change the types of NAME, PROMPT to const Ascbyte *.
 * lread.c:
 * lread.c (structure_keyword_entry_description): New.
 * lread.c (structure_keyword_entry_dynarr_description): New.
 * lread.c (structure_type_description): New.
 * lread.c (structure_type_dynarr_description): New.
 Document the structure type infrastructure more thoroughly for the
 dumper.
 * lread.c (structure_type_create):
 Dump the structure type properly.
 * lrecord.h:
 Extensive updates to a long comment in this header.
 * lrecord.h (enum memory_description_type):
 New entries, XD_FUNCTION_POINTER, XD_DATA_POINTER in this enum.
 * lrecord.h (struct opaque_convert_functions):
 Comment documenting lack of a need for memory descriptions for
 this as of today.
 * lstream.c (lstream_implementation_description_1):
 Document there are many C function pointers, an ASCII string, and
 a data segment pointer stored in struct lstream_implementation.
 * lstream.h (lstream_implementation):
 Update the type of NAME to be, explicitly, Ascbyte *.
 * specifier.c (specifier_methods_description_1):
 Document there are many C function pointers, an ASCII string, and
 a data segment pointer stored in struct specifier_methods.
 * specifier.c (specifier_caching_description_1):
 Document that there are two C function pointers stored in struct
 specifier_caching.
 * symbols.c:
 * symbols.c (symbol_value_magic_description): New. Document that a
 symbol_value_magic stores a pointer to the data segment. 
 * symbols.c (symbol_value_buffer_local_description_1): Use it.
 * symbols.c (symbol_value_lisp_magic_description): Use it.
 * symbols.c (symbol_value_varalias_description): Use it.
 * symbols.c (symbol_value_forward_description): Use it.
 * ui-gtk.c:
 Document that there are two C function pointers in
 emacs_ffi_data.
2024年10月17日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor.c (color_instantiate):
 Don't attempt to pass a Lisp_Object as an int to
 FACE_PROPERTY_INSTANCE_1, thank you Mats Lidell and the buildbot.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 Supply file-name, coding system information for symbols loaded
 from modules.
 * alloc.c:
 * alloc.c (uninit_memory_usage_stats): New.
 * doc.c:
 * doc.c (Fbuilt_in_symbol_file):
 Check the plist of the variable-documentation property for file
 name information, as is supplied for variables in modules.
 * doc.c (syms_of_doc): Move Qsymbol_file to general-slots.h, now
 it is used by emodules.c.
 * emodules.c (Vknown_file_names): New. Weak list of file names
 known by emodules_doc_subr() and emodules_doc_sym().
 * emodules.c (emodules_doc): New. Implementation of the next two
 functions.
 * emodules.c (emodules_doc_subr):
 Revise this, accept FILE_NAME and CODING_SYSTEM_NAME, documenting
 the file a given subr was loaded from, and the coding system used
 for the file name and for the docstring.
 * emodules.c (emodules_doc_sym):
 Ditto.
 * emodules.c (vars_of_module):
 staticpro() Vknown_file_names.
 * emodules.h:
 * emodules.h (EMODULES_VERSION):
 Bump this, now emodules_doc_sym() and emodules_doc_sbur() take
 extra args.
 #define CDOCSUBR and CDOCSYM appropriately.
 * general-slots.h:
 Include Qsymbol_file here.
 * lrecord.h:
 * lrecord.h (UNDEF_LISP_OBJECT):
 Call uninit_memory_usage_stats() here.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 Move the memory usage stats out of struct lrecord_implementation,
 given that does not work with module support.
 * lrecord.h:
 * lrecord.h (struct lrecord_implementation):
 Remove most of the memory usage infrastructure from this
 structure.
 * lrecord.h (INIT_MEMORY_USAGE_STATS):
 Call the new init_memory_usage_stats() within this #define,
 whether or not MEMORY_USAGE_STATS is defined.
 * lrecord.h (INIT_LISP_OBJECT_BEGINNING):
 Ditto.
 
 * alloc.c:
 * alloc.c (Vmemusage_stats_lists): New.
 Lisp vector storing what used to be stored in the
 memusage_stats_list field of lrecord_implementation; this is just
 staticpro()ed, making GC protection and dumping easier.
 * alloc.c (lrecord_stats_metadata): New C array, for other data
 related to memory usage and previously in struct
 lrecord_implementation.
 
 * alloc.c (init_memory_usage_stats): New. Called from
 INIT_LISP_OBJECT() whether or not MEMORY_USAGE_STATS support is
 included. 
 * alloc.c (tick_lrecord_stats):
 * alloc.c (finish_object_memory_usage_stats):
 * alloc.c (Fobject_memory_usage):
 * alloc.c (lisp_object_memory_usage_full):
 * alloc.c (compute_memusage_stats_length):
 * alloc.c (init_alloc_once_early):
 Create Vmemusage_stats_lists very early.
 * alloc.c (syms_of_alloc):
 Initialise those elements of Vmemusage_stats_lists that are
 Qnull_pointer to Qnil, now that is available.
 * buffer.c (vars_of_buffer):
 * casetab.c (vars_of_casetab):
 * casetab.c (complex_vars_of_casetab):
 * chartab.c (vars_of_chartab):
 * elhash.c (vars_of_elhash):
 * mule-charset.c (vars_of_mule_charset):
 * scrollbar.c (vars_of_scrollbar):
 * specifier.c (vars_of_specifier):
 * window.c (vars_of_window):
 * frame.c (vars_of_frame):
 Use INIT_MEMORY_USAGE_STATS instead of OBJECT_HAS_PROPERTY(...
 memusage_stats_list) within these files, now the memory usage
 stats are no longer in lrecord_implementation.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * emodules.c (find_make_module):
 Given we now unload modules, modules[i].soname can be NULL, check
 for this before calling qxestrcmp().
 * emodules.c (attempt_module_delete):
 After successful unload, set the pointer to the unload function to
 NULL.
 * lread.c (vars_of_lread): Update the docstring for load-history
 to document the (defun . SYMBOL) syntax.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c:
 * alloc.c (make_subr): New.
 * alloc.c (sweep_subrs): New.
 * alloc.c (init_alloc_early): Call init_subr_alloc().
 * lisp.h: Declare make_subr.
 * symbols.c (check_module_subr):
 Call make_subr() in this macro, ALLOC_NORMAL_LISP_OBJECT() does
 not work.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 Get unloading of modules working again, when MEMORY_USAGE_STATS is
 not defined
 * alloc.c:
 * alloc.c (unstaticpro_nodump_1):
 Operate on staticpros_nodump, as was intended.
 * alloc.c (unstaticpro_nodump): Ditto.
 * symeval.h (DEFVAR_SYMVAL_FWD_OBJECT):
 Call staticpro (), not staticpro_1 () in this macro, so the
 redefinition in emodules.h has a chance to do its thing.
2024年10月14日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h (struct Lisp_Subr):
 Make the DOC field of this structure a Lisp_Object, simplifying
 dump and GC and avoiding memory leaks with docstrings for subrs in
 modules.
 Declare PROMPT and NAME as const CIbyte *, not const char *.
 * lisp.h (DEFUN):
 * lisp.h (DEFUN_NORETURN):
 Initialise DOC using Qnull_pointer, not 0.
 * doc.c:
 * doc.c (Fbuilt_in_symbol_file):
 No need for quite as many casts within this file.
 If XSUBR (fun)->doc is a Lisp string, retrieve its file name from
 its plist, in anticipation of work in this direction for modules.
 * doc.c (Fdocumentation):
 * doc.c (Fsnarf_documentation):
 * doc.c (verify_doc_mapper):
 * doc.c (syms_of_doc):
 Do a DEFSYMBOL for Qsymbol_file here.
 * lrecord.h:
 * lrecord.h (enum memory_description_type):
 * dumper.c:
 * dumper.c (pdump_register_sub):
 * dumper.c (pdump_store_new_pointer_offsets):
 * dumper.c (pdump_reloc_one):
 * gc.c (lispdesc_one_description_line_size):
 * gc.c (kkcc_marking):
 Remove the XD_DOC_STRING annotation from the dumper and the
 garbage collector, no longer needed.
 * emodules.c (emodules_doc_subr):
 Just build_ascstring () on DOC and set subr->doc to its result,
 avoid leaking the docstring on unload of the module.
 * eval.c:
 Annotate the DOC field of Lisp_Subr as a Lisp object.
 * symbols.c: (check_module_subr):
 Copy the subr structure to Lisp-allocated memory. Don't put a
 pointer to the new subr in the DOC field of the old subr, not
 needed.
 * symbols.c (defsubr):
 * symbols.c (defsubr_macro):
 Correct the load history entries for subrs loaded from modules in
 passing.
2024年10月13日 Aidan Kehoe <kehoea@parhasard.net>
 * bytecode.c:
 * bytecode.c (bytecode_arithop):
 Simplify the implementation of Bmax, Bmin in this file.
 * data.c (Fmax, Fmin):
 Move to Lisp, for the sake of maintainability (no need for #ifdef
 WITH_NUMBER_TYPES). There is no loss of speed for the usual case
 of byte-compiled code, since both functions have bytecodes.
 * data.c (syms_of_data):
 Remove the DEFSUBRs for these.
 * lisp.h:
 Remove their declarations.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c:
 * regex.c (enum):
 * regex.c (print_partial_compiled_pattern):
 * regex.c (fixup_on_failure_jump_smart):
 * regex.c (regex_compile):
 * regex.c (re_compile_fastmap):
 * regex.c (re_match_2_internal):
 Remove on_failure_keep_string_jump in favour of
 on_failure_jump_exclusive, reducing code size and failure stack
 usage.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.h (DETECTOR_DESCRIPTION_OFFSET): New macro.
 * file-coding.h (INITIALIZE_DETECTOR_DESCRIPTION):
 Use it, placate both g++ and -fsanitize=undefined at the same time.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * extents.c (Fset_extent_parent):
 Never pass a NULL first argument to qsort() in this function, even
 if the length of the array to be sorted is zero.
 * text.h (EI_ALLOC_AND_COPY):
 Never pass a NULL first argument to memcpy() in this macro, even
 if the length to be copied is zero.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * doprnt.c (fixnum_to_string_base_10):
 * lisp.h (FLOAT_HASHCODE_FROM_DOUBLE):
 Further couple of casts for the sake of -fsanitize=undefined.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * data.c (Fash): 
 Do bit shifting on EMACS_UINTs for the sake of -fsanitize=undefined.
 * regex.c:
 * regex.c (extract_number):
 Do bit shifting on an unsigned type for the sake of
 -fsanitize=undefined.
 * sysdep.c (get_random):
 Ditto.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.h (INITIALIZE_DETECTOR_DESCRIPTION):
 Use offsetof() rather than portable_offsetof() in this macro, for
 the sake of -fsanitize=undefined.
 * lisp.h:
 Motivate this change in a comment.
2024年09月22日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c:
 * file-coding.c (aligned_sizeof_coding_system): New.
 * file-coding.c (allocate_coding_system): Use it.
 Avoid misaligned coding systems objects in the dump file,
 previously addressed for lstreams, specifiers, opaque data in
 Martin Buchholz's change of 2001年01月24日. Approach taken the same as
 that for specifiers.
 * file-coding.c (struct convert_eol_coding_system):
 Remove a dummy integer no longer needed.
2024年09月08日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor.c (color_instantiate):
 * fontcolor.c (font_instantiate):
 * fontcolor.c (face_boolean_instantiate):
 * fontcolor.c (face_background_placement_instantiate):
 * glyphs.c (image_instantiate):
 * specifier.c (specifier_instance_from_inst_list):
 * specifier.h (struct specifier_methods):
 Avoid passing an int among the Lisp_Object va_args of the
 specifier instantiate methods, this is not portable behaviour,
 thank you clang and -fsanitize=undefined.
2024年09月23日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c (Fvector):
 * alloc.c (make_string):
 * alloc.c (make_extstring):
 * array.c:
 * array.c (Dynarr_delete_many):
 * array.h:
 * file-coding.c (convert_eol_encode):
 * lstream.c (resizing_buffer_write_with_extents):
 Avoid calls to memcpy(), memmove() with N zero, thank you clang
 and -fsanitize=undefined.
2024年09月07日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h (SET_LISP_READONLY): New macro, for symmetry with the
 rvalue LISP_READONLY macro.
 * alloc.c (make_string_nocopy):
 Mark the created string as readonly for Lisp, since this function
 is routinely called with CONTENTS as a C string literal, and those
 are not guaranteed writable. Use SET_LISP_READONLY() for this.
2024年08月18日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c (make_string_nocopy):
 With ERROR_CHECK_TEXT, assert that we haven't been called on stack
 data.
2024年06月24日 Aidan Kehoe <kehoea@parhasard.net>
 * alloc.c (resize_string):
 Avoid calling free() on dumped data in this function.
 * alloc.c (verify_string_chars_integrity):
 Correct types in this function.
 * data.c (init_errors_once_early):
 Correct the docstring for the setting-constant error.
2024年08月26日 Aidan Kehoe <kehoea@parhasard.net>
 * regex.c:
 * regex.c (regex_compile):
 * regex.c (BAD_INTERVAL):
 * regex.c (at_begline_loc_p):
 * regex.c (at_endline_loc_p):
 * regex.c (compile_range):
 * regex.c (compile_extended_range):
 * regex.c (re_match_2_internal):
 * regex.h:
 * regex.h (RE_CHAR_CLASSES):
 * regex.h (RE_DOT_NEWLINE):
 * regex.h (RE_INTERVALS):
 * regex.h (RE_NO_POSIX_BACKTRACKING):
 * regex.h (RE_NO_MULTI_DIGIT_BK_REFS):
 Remove those regex syntax options that we don't use, for the sake
 of maintainability. Remove re_comp(), re_exec (), regcomp (),
 regexec (), regerror (), regfree (), for the same reason.
2024年08月26日 Aidan Kehoe <kehoea@parhasard.net>
 Move handling of on_failure_jump_smart to compile time, regex.c.
 * regex.c:
 * regex.c (PUSH_FAILURE_POINT): Fix a bug in passing when debugging.
 * regex.c (POP_FAILURE_POINT): Fix a bug in passing when debugging.
 * regex.c (fixup_on_failure_jump_smart): New.
 * regex.c (regex_compile): Call it.
 * regex.c (mutually_exclusive_p): Adjust the calling convention of
 this to reflect that it's only called at compilation of the
 regexp, not at match time.
 * regex.c (re_match_2_internal):
 Remove handling of on_failure_jump_smart from this funnction. 
 * regex.h:
 Remove RE_MUTUALLY_EXCLUSIVE_P_ARGS{,DECL} from this header, no
 longer needed.
2024年08月24日 Aidan Kehoe <kehoea@parhasard.net>
 Move the regex.c voluminous logging #defines to using variadic
 macros.
 * regex.c (DEBUG_PRINT): New.
 * regex.c (DEBUG_PRINT1, DEBUG_PRINT2, DEBUG_PRINT3,
 DEBUG_PRINT4): Removed.
 * regex.c (DEBUG_FAIL_PRINT): Revise.
 * regex.c (DEBUG_MATCH_PRINT): Revise.
 * regex.c (DEBUG_FAIL_PRINT_DOUBLE_STRING): Revise.
 * regex.c (DEBUG_MATCH_PRINT_DOUBLE_STRING): Revise.
 * regex.c (ENSURE_FAIL_STACK):
 * regex.c (PUSH_FAILURE_REG):
 * regex.c (POP_FAILURE_REG):
 * regex.c (CHECK_INFINITE_LOOP):
 * regex.c (PUSH_FAILURE_POINT):
 * regex.c (POP_FAILURE_POINT):
 * regex.c (regex_compile):
 * regex.c (mutually_exclusive_p):
 * regex.c (re_match_2_internal):
 Switch to DEBUG_PRINT() in all these functions.
2024年08月24日 Aidan Kehoe <kehoea@parhasard.net>
 Integrate Stefan Monnier's GNU change of March 2000, which removed
 the code to deal with inner groups with start_memory, stop_memory
 (making it more economic of pattern space), and allows much more
 shy groups than previously, since they do not require an internal
 register number.
 Significant changes necessary for the commit to work on XEmacs
 include being careful to use two bytes for the register numbers
 for start_memory, stop_memory, to preserve the code that copies
 the compiled pattern buffer to the stack when matching for the
 sake of re-entrancy, to error appropriately with patterns like
 "a++", which GNU accepts, and to replace GNU's use of
 NUM_NONREG_ITEMS with NUM_FAILURE_ITEMS, which better names the
 items in question.
 git commit 505bde11b0fb6f539db1ef0713f19c3c2d86064a 
 Author: Stefan Monnier <monnier@iro.umontreal.ca>
 Date: Wed Mar 8 23:25:41 2000 +0000
 This is a big redesign of failure-stack and register handling,
 prompted by bugs revealed when trying to add shy-groups. Overall,
 what happened is that loops are now structured a little
 differently, groups can be shy and the code is a little simpler.
 
 * regex.c: (enum re_opcode_t): Remove jump_past_alt, maybe_pop_jump,
 push_dummy_failure and dumy_failure_jump.
 Add on_failure_jump_(exclusive, loop and smart).
 Also fix the comment for (start|stop)_memory since they now only take
 one argument (the second has becomes unnecessary).
 (print_partial_compiled_pattern): Adjust for changes in re_opcode_t.
 (print_compiled_pattern): Use %ld to printf long ints and flush to make
 debugging a little easier.
 (union fail_stack_elt): Make the integer unsigned.
 (struct fail_stack_type): Add a `frame' element.
 (INIT_FAIL_STACK): Init `frame' as well.
 (POP_PATTERN_OP): New macro for re_compile_fastmap.
 (DEBUG_PUSH, DEBUG_POP): Remove.
 (NUM_REG_ITEMS): Remove.
 (NUM_NONREG_ITEMS): Adjust.
 (FAILURE_PAT, FAILURE_STR, NEXT_FAILURE_HANDLE, TOP_FAILURE_HANDLE):
 New macros for the cycle detection.
 (ENSURE_FAIL_STACK): New macro for PUSH_FAILURE_(REG|POINT).
 (PUSH_FAILURE_REG, POP_FAILURE_REG, CHECK_INFINITE_LOOP): New macros.
 (PUSH_FAILURE_POINT): Don't push registers any more.
 The pattern address pushed is not the destination of the jump
 but the source of it instead.
 (NUM_FAILURE_ITEMS): Remove.
 (POP_FAILURE_POINT): Adapt to the new stack structure (i.e. pop
 registers before the actual failure point).
 Don't hardcode any meaning for str==NULL anymore.
 (union register_info_type, REG_MATCH_NULL_STRING_P, IS_ACTIVE)
 (MATCHED_SOMETHING, EVER_MATCHED_SOMETHING, SET_REGS_MATCHED): Remove.
 (REG_UNSET_VALUE): Use NULL (why not?).
 (compile_range): Remove declaration since it doesn't exist.
 (struct compile_stack_elt_t): Remove inner_group_offset.
 (old_reg(start|end), reg_info, reg_dummy, reg_info_dummy): Remove.
 (regex_grow_registers): Remove dead code.
 (FIXUP_ALT_JUMP): New macro.
 (regex_compile): Add shy-groups
 Change loops to use on_failure_jump_smart&jump instead of
 on_failure_jump&maybe_pop_jump.
 Change + loops to eliminate the initial (dummy_failure_)jump.
 Remove c1_base (looks like unused variable to me).
 Use `jump' instead of `jump_past_alt' and don't bother with
 push_dummy_failure in alternatives since it is now unnecessary.
 Use FIXUP_ALT_JUMP.
 Eliminate a useless `#ifdef emacs' for (re)allocating the stack.
 (re_compile_fastmap): Remove dead variables i and num_regs.
 Exit from loop when bufp->can_be_null rather than jumping to `done'.
 Avoid jumping backwards so as to ensure termination.
 Use PATTERN_STACK_EMPTY and POP_PATTERN_OP.
 Improved handling of backreferences.
 Remove dead code in handling of `anychar'.
 (skip_noops, mutually_exclusive_p): New functions taken from the
 handling of `maybe_pop_jump' in re_match_2_internal.
 Slightly improve mutually_exclusive_p to handle ".+\n".
 ((lowest|highest)_active_reg, NO_(LOWEST|HIGHEST)_ACTIVE_REG)
 Remove.
 (re_match_2_internal): Use %p instead of 0x%x when printf'ing ptrs.
 Don't SET_REGS_MATCHED anymore. Remove many dead variables.
 Push register (in `start_memory') on the stack rather than storing it
 in old_reg(start|end).
 Remove the cycle detection from `stop_memory', replaced by the use
 of on_failure_jump_loop for greedy loops.
 Add code for the new on_failure_jump_<foo>.
 Remove ad-hoc code in `on_failure_jump' to push more registers
 in the case of a loop.
 Take out code from `maybe_pop_jump' into separate functions and
 adapt it to the semantics of `on_failure_jump_smart'.
 Remove jump_past_alt, dummy_failure_jump and push_dummy_failure.
 Remove dummy_failure handling and handling of `failures to jump
 to on_failure_jump' (this last one was already dead code, it seems).
 * regex.h:
 * regex.h (RE_EXECUTE_CHARSET_MULE_ARGS_DECL): New.
 * regex.h (RE_EXECUTE_CHARSET_MULE_ARGS): New.
 * regex.h (RE_MUTUALLY_EXCLUSIVE_P_ARGS_DECL): New.
 * regex.h (RE_MUTUALLY_EXCLUSIVE_P_ARGS): New.
 All provided to make mutually_exclusive_p () portable to XEmacs
 and to those files under lib-src/ that use regex.o.
 * regex.h (struct re_pattern_buffer):
 Update some comments in this file.
2024年08月18日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor-x.c (x_print_font_instance):
 Use the appropriate format specifier for an address when printing
 an XFT font's address.
 * redisplay-x.c (x_output_string):
 Cast some members of an XRectangle structure, suppressing a
 warning from the C++ compiler.
2024年08月18日 Aidan Kehoe <kehoea@parhasard.net>
 * buffer.c (Vinhibit_read_only):
 Add information regarding the buffer-local status of this variable
 to its docstring (usually not buffer local, usually buffer-local
 in the minibuffer).
2024年06月20日 Aidan Kehoe <kehoea@parhasard.net>
 * bytecode.c: (Fcompiled_function_interactive): Give some more
 information in the docstring regarding what an interactive spec
 can be.
 * callint.c:
 * callint.c (quotify_args): Removed, no longer needed.
 * callint.c (Fcall_interactively):
 Update to use the metadata for the command history generated by
 byte-compiler, or to call #'byte-compile-annotate-interactive
 ourselves if this is not available (e.g. with an interpreted command).
 * callint.c (syms_of_callint):
 Define Qbyte_compile_annotate_interactive as a symbol, making the
 Lisp function available to #'call-interactively.
2024年06月25日 Aidan Kehoe <kehoea@parhasard.net>
 * symbols.c (Fapropos_internal): Removed. Now in lisp/apropos.el.
2024年05月17日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor-x.c (get_string):
 Avoid leaking the result of XGetAtomName in this macro.
 * fontcolor-x.c (get_number):
 Use more braces in this macro to reduce the chance of bugs.
 * fontcolor-x.c (truename_via_random_props):
 Avoid calling XFree on stack memory allocate by
 EXTERNAL_TO_ITEXT(), now the get_string() macro has been
 corrected.
2024年05月01日 Aidan Kehoe <kehoea@parhasard.net>
 * callint.c (Fcall_interactively):
 When reading a character with the ?c interactive spec, just use
 the PROMPT argument to #'read-char rather than re-implementing
 it, giving better user feedback regarding the character typed.
2024年04月29日 Aidan Kehoe <kehoea@parhasard.net>
 Use the newer _CONST_X_STRING X11 #define instead of the
 xt-wrappers.h approach to suppressing warnings with string
 constants used for X11 String types. Update various declarations
 to String rather than char * to work better with this.
 Remove the Xt_RESOURCE macro, which basically hid casts to
 String. Remove the Xt_SET_ARG macro for the same reason,
 Keep the Xt_SET_VALUE, Xt_GET_VALUE convenience macros, they
 remain of use. Put them in console-x-impl.h.
 Use BEGIN_C_DECLS/END_C_DECLS appropriately in array.h,
 EmacsManager.h, lisp.h for a cleaner C++ build.
 
 * EmacsFrame.c:
 * EmacsFrame.c (res):
 * EmacsFrame.c (EmacsFrameSetCharSize):
 * EmacsManager.c:
 * EmacsManager.c (res):
 * EmacsManager.h:
 * EmacsShell-sub.c:
 * EmacsShell-sub.c (update_size_hints_internal):
 * array.h:
 * config.h.in:
 * console-x-impl.h:
 * device-x.c:
 * device-x.c (emacs_options):
 * device-x.c (sanity_check_geometry_resource):
 * device-x.c (x_init_device):
 * device-x.c (x_get_resource_prefix):
 * frame-x.c:
 * frame-x.c (x_wm_set_cell_size):
 * frame-x.c (x_wm_set_variable_size):
 * frame-x.c (x_wm_store_class_hints):
 * frame-x.c (x_set_frame_text_value):
 * frame-x.c (x_initialize_frame_size):
 * frame-x.c (x_create_widgets):
 * frame-x.c (x_set_frame_icon):
 * frame-x.c (x_set_frame_position):
 * frame-x.c (x_update_frame_external_traits):
 * glyphs-x.c (x_redisplay_widget):
 * glyphs-x.c (x_widget_instantiate):
 * glyphs-x.c (x_button_instantiate):
 * input-method-xlib.c (IMInstantiateCallback):
 * input-method-xlib.c (res):
 * input-method-xlib.c (EmacsXtCvtStringToXIMStyles):
 * lisp.h:
 * menubar-x.c (make_dummy_xbutton_event):
 * select-x.c (hack_motif_clipboard_selection):
2024年02月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * keymap.c (control_meta_superify): Restore 'static' as all uses
 are in keymap.c and resolves [-Wmissing-prototypes].
2024年02月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * fontcolor-tty.c (find_tty_closest_color_1): Resolve
 [-Wdeclaration-after-statement].
2024年02月15日 Richard Hopkins <xemacs@unbit.co.uk>
 Internally the color name is a symbol and now TTY_COLOR_ENTRY_NAME
 always returns a symbol rather than a symbol or a string; the
 conversion back to string is for consistency at the lisp level.
 * fontcolor-tty.c (find_tty_closest_color_1): Return entry as-is
 from color_alist.
 (Ffind_tty_closest_color): Convert color name to string here
 instead.
2024年02月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * fontcolor-tty.c (Ffind_tty_color):
 (find_tty_closest_color_1):
 (tty_color_list):
 (tty_initialize_color_instance): Use new accessors rather than
 explicit car/cdr calls.
 * console-tty-impl.h (TTY_COLOR_ENTRY_NAME):
 (TTY_COLOR_ENTRY_DATA): New accessors for entry in color_alist
 which maps NAME to COLOR_DATA.
 (TTY_COLOR_DATA_FG_STRING):
 (TTY_COLOR_DATA_BG_STRING):
 (TTY_COLOR_DATA_RGB_VECTOR): New. Get appropriate value from the
 mapped COLOR_DATA.
2024年02月12日 Richard Hopkins <xemacs@unbit.co.uk>
 Add support on TTY for X color names and hex color strings that
 will fallback to an available device color. This extracts the MSW
 implementation to make it available for use on both TTY and MSW.
 * fontcolor.h (Rgbref): New integral type to represent a color
 allowing [0-255] for each RGB component.
 (invalid_rgb): Declare it.
 (RGB_CONSTANT): New macro for initializing shared_X_color_map.
 (rgb_valid_p): New. Check if an Rgbref instance is valid and the
 RGB components can be used.
 (rgb_pack): New. Pack the given red, green and blue into a single
 Rgbref.
 (rgb_red): New. Extract the red component from an Rgbref.
 (rgb_green): New. Extract the green component from an Rgbref.
 (rgb_blue): New. Extract the blue component from an Rgbref.
 (shared_X_string_to_color): Declare it.
 (shared_X_color_to_string): Declare it.
 (shared_X_color_list): Declare it.
 * fontcolor.c (invalid_rgb): New. Sentinel value for an invalid
 RGB.
 (colormap_t): Moved from fontcolor-msw.c
 (shared_X_color_map): Extracted from mswindows_X_color_map.
 (hexval): Moved from fontcolor-msw.c.
 (colormap_t_compare): Moved from fontcolor-msw.c.
 (shared_X_string_to_color): New. Extracted from
 mswindows_X_string_to_color.
 (shared_X_color_to_string). New. Extracted from
 mswindows_color_to_string.
 (shared_X_color_list): New. Extracted from mswindows_color_list.
 * fontcolor-tty.c (tty_color_list): Use shared_X_color_list.
 (tty_initialize_color_instance): Use shared_X_string_to_color to
 support color names and hex strings.
 (tty_valid_color_name_p): Use shared_X_string_to_color to support
 color names and hex strings.
 * fontcolor-msw.c (colormap_t): Moved to fontcolor.c
 (mswindows_X_color_map): Moved to fontcolor.c.
 (hexval): Moved to fontcolor.c.
 (colormap_t_compare): Moved to fontcolor.c
 (mswindows_string_to_color): Use shared_X_string_to_color.
 (mswindows_color_to_string): Use shared_X_color_to_string.
 (mswindows_color_list): Use shared_X_color_list.
2023年11月19日 Aidan Kehoe <kehoea@parhasard.net>
 * scrollbar.c (update_scrollbar_instance):
 Fix my bug with buffer-position-based scrolling, thank you Richard
 Hopkins.
 NEW_SLIDER_SIZE as window_displayed_height() * 512 was never a
 good decision, far too big, and this misled the toolkits. The
 previous arithmetic is cheap, works for him, works for me, always
 worked for the toolkits.
2023年11月05日 Aidan Kehoe <kehoea@parhasard.net>
 * line-number.c:
 * line-number.c (byte_beginning_of_line): New.
 Given a line number, return the Bytebpos of the beginning of that
 line. This is the inverse of buffer_line_number ().
 * line-number.h:
 Declare it.
 * redisplay.c (force_valid_bytebpos_or_zero):
 Make this un-static given it's now used by
 scrollbar_slider_position_to_lisp ().
 * scrollbar-gtk.c:
 * scrollbar-gtk.c (gtk_update_scrollbar_instance_values):
 Fix handling of line-oriented scrolling.
 Use marker_byte_position() instead of marker_position(), given we
 function in either lines or byte positions.
 * scrollbar-gtk.c (scrollbar_cb):
 Use scrollbar_slider_position_to_lisp () when creating an argument
 to #'scrollbar-vertical-drag.
 * scrollbar-msw.c (mswindows_handle_scrollbar_event):
 Ditto.
 * scrollbar-x.c:
 * scrollbar-x.c (x_update_scrollbar_instance_values):
 Fix handling of line-oriented scrolling.
 Use marker_byte_position() instead of marker_position(), given we
 function in either lines or byte positions.
 * scrollbar-x.c (x_update_vertical_scrollbar_callback):
 Use scrollbar_slider_position_to_lisp () when creating an argument
 to #'scrollbar-vertical-drag.
 * scrollbar.c:
 * scrollbar.c (scrollbar_slider_position_to_lisp): New.
 * scrollbar.c (update_scrollbar_instance):
 Mark that scrolling is line-oriented or not explicitly when
 passing values to the toolkit code.
 * scrollbar.h:
 * scrollbar.h (struct scrollbar_instance):
 New field, line_oriented_scrolling_p.
2023年10月22日 Aidan Kehoe <kehoea@parhasard.net>
 * event-msw.c (mswindows_wnd_proc):
 Only respond to TTN_NEEDTEXTW, not TTN_NEEDTEXTA messages, when
 handling WM_NOTIFY. Change missed in 0f36f2ab4a32 , thank you Kurt
 Geisel.
2023年10月21日 Aidan Kehoe <kehoea@parhasard.net>
 1. Make upshift_event (), downshift_event (), event_upshifted_p ()
 also do the right things with non-ASCII keysyms with case.
 2. Only accept characters as the #'character-of-keysym property,
 an obsolescent way to document that a symbol has an associated
 character, and something never supported by GNU, so char-int
 confoundance should never have come up.
 * events.c:
 * events.c (event_to_character):
 Fixnums will never appear as event keysyms, don't check for them.
 Only check for characters as the character-of-keysym property and
 the related ascii-character property, these are XEmacs approaches
 to specifying associated characters that should not come up in GNU
 code.
 * events.c (upshift_event):
 Don't check for fixnums as event keysyms. Generalise the case
 mapping to handle non-ASCII case transformation.
 * events.c (downshift_event):
 Ditto.
 * events.c (event_upshifted_p):
 Use a more modern return type here.
 Use a more modern implementation that deals with non-ASCII case
 transformation. 
 * keymap.c (event_matches_key_specifier_p):
 * keymap.c (meta_prefix_char_p):
 Use more modern return types types for these functions.
 
 * keymap.c (map_keymap_sort_predicate):
 * keymap.c (describe_map_mapper):
 * keymap.c (describe_map_sort_predicate):
 * keymap.c (describe_map):
 Only accept characters, not char-ints, for the character-of-keysym
 property in these functions.
 * keymap.h (event_matches_key_specifier_p):
 Update a return type here.
2023年10月20日 Aidan Kehoe <kehoea@parhasard.net>
 Some changes to get the latest beta building with Visual
 Studio from Kurt Geisel <kgeisel@outlook.com>. Thank you Kurt!
 * dumper.c (pdump_resource_get):
 Even though the resource segment is marked read/write, we now need
 to explicitly change the pages in the mapped resource address
 space to be writeable in order to allow pdump relocation to not
 hit write access violations.
 * lisp.h (max_align_t): Our definition of max_align_t is no longer
 needed from VS 2019 onwards.
 * nt.c (init_nt):
 Code that duplicates standard handles as non-inheritable breaks
 ucrt lookup of standard stream identifiers (stdout, stdin,
 stderr), which are now resolved as function calls (defined by the
 preprocessor) that assume the file handles in the global table are
 stable. This breaks non-console I/O and the build-time piping from
 i.exe.
2023年10月10日 Richard Hopkins <xemacs@unbit.co.uk>
 * fontcolor-tty.c (find_tty_closest_color_1): Internal function to
 find the closest color from the color_alist.
 * fontcolor-tty.c (Ffind_tty_closest_color): New. From the given
 RGB components (0-255) it will find the closest registered color
 for the device. Expose to lisp in preparation for use from
 #'font-tty-find-closest-color.
 * fontcolor-tty.c (syms_of_fontcolor_tty): Add
 Ffind_tty_closest_color.
2023年10月09日 Richard Hopkins <xemacs@unbit.co.uk>
 * fontcolor-tty-impl.h (struct tty_color_instance_data): Add
 fields for is_rgb_known, red, green and blue.
 * fontcolor-tty-impl.h (COLOR_INSTANCE_TTY_IS_RGB_KNOWN):
 (COLOR_INSTANCE_TTY_RED):
 (COLOR_INSTANCE_TTY_GREEN):
 (COLOR_INSTANCE_TTY_BLUE): New wrappers for new fields.
 * fontcolor-tty.c (tty_initialize_color_instance): Populate
 is_rgb_known, red, green and blue based on data populated in
 color_alist.
 * fontcolor-tty.c (tty_color_instance_rgb_components): New
 function implementing generic #'color-instance-rgb-components; the
 components are converted to 16-bit as required.
 * fontcolor-tty.c (console_type_create_fontcolor_tty): Register
 #'color-instance-rgb-components.
2023年10月08日 Aidan Kehoe <kehoea@parhasard.net>
 Recent Motif Xm.h unilaterally #defines USE_XFT if XFT is
 available, which makes building without it difficult for
 XEmacs. Change our #define to XEMACS_USE_XFT.
 Change some related #defines for symmetry.
 * console-xlike-inc.h (XEMACS_USE_XFT):
 * fontcolor-xlike-inc.c:
 * fontcolor-xlike-inc.c (XFUN):
 * fontcolor-xlike-inc.c (FcResultToString):
 * redisplay-x.c:
 * redisplay-x.c (x_get_gc):
 * redisplay-x.c (separate_textual_runs_xft_nomule):
 * redisplay-x.c (separate_textual_runs_xft_mule):
 * redisplay-x.c (separate_textual_runs):
 * redisplay-x.c (x_text_width_single_run):
 * redisplay-x.c (x_output_string):
 * redisplay-xlike-inc.c (XLIKE_output_display_block):
2023年10月05日 Aidan Kehoe <kehoea@parhasard.net>
 * window.c (Fwindow_end):
 window_display_buffer () can sometimes give NULL if the window has
 yet to be redisplayed, check for that in this function.
2023年10月04日 Aidan Kehoe <kehoea@parhasard.net>
 * search.c (set_lisp_search_registers):
 Force the correct order of START, END arguments to
 set_extent_endpoints(), thank you Jody Weissmann, thank you Henry
 S. Thompson.
2023年09月30日 Aidan Kehoe <kehoea@parhasard.net>
 Add modifiers.h, on the model of keymap-buttons.h. Use it in 
 those places where code iterates through modifiers.
 Print modifiers for motion, misc-user events, which was not done
 previously.
 Fix a bug in passing where list structure was not appropriately
 generated for motion events, thank you Henry S. Thompson. 
 
 * modifiers.h:
 * modifiers.h (XEmacs is free software): New.
 * events.c (print_event):
 Print modifiers for motion, misc-user events.
 * events.c (Fmake_event):
 Iterate through modifiers using modifiers.h when processing them.
 * events.c (format_event_object):
 Iterate through modifiers using modifiers.h when printing them.
 * events.c (Fevent_modifiers):
 Iterate through modifiers using modifiers.h when constructing a
 symbolic list of them.
 * events.h:
 * events.h (enum event_modifiers):
 Use FROB_MODIFIER and modifiers.h when constructing this enumeration.
 * keymap.c:
 * keymap.c (FROB_MODIFIER): Use this #define with modifiers.h when
 declaring symbols needed to declare modifiers.
 * keymap.c (bucky_sym_to_bucky_bit):
 Use modifiers.h within this function.
 * keymap.c (control_meta_superify):
 Ditto.
 * keymap.c (canonicalize_keysym):
 Ditto, error within this function rather than in callers when
 supplied with keysyms that are modifiers names and that are not
 buttons.
 * keymap.c (parse_list_keystroke): New. Refactored out of
 Fcanonicalize_keysym(), also used in define_key_parser().
 * keymap.c (Fcanonicalize_keysym): Use parse_list_keystroke ().
 * keymap.c (define_key_parser): Ditto.
 * keymap.c (Fsingle_key_description):
 Use modifiers.h in this function, avoid printing redundant
 modifiers multiply.
 For symmetry with treatment of event arguments, use
 character_to_event() to extract modifiers for control characters.
 * keymap.c (describe_map):
 Use modifiers.h when iterating through modifiers to print them.
 * keymap.c (syms_of_keymap):
 Use modifiers.h when iterating through modifier names for
 DEFSYMBOL().
 * keymap.h:
 Use modifiers.h when iterating through modifier names for
 declarations.
 * lisp.h:
 Remove declaration of control_meta_superify(), no longer used in
 events.c.
2023年10月07日 Aidan Kehoe <kehoea@parhasard.net>
 Clean up a few straggling remnants of the old mark algorithm,
 missed in cca3709a62ad .
 * alloc.c:
 Remove mention of objects' mark methods.
 * array.c (mark_Lisp_Object_dynarr): Removed, not necessary since
 KKCC is the only mark algorithm.
 * buffer.c (common_init_complex_vars_of_buffer):
 Remove mention of a mark method.
 * console-impl.h (struct console_methods): Remove the
 mark_console(), mark_device(), mark_frame(),
 mark_color_instance(), mark_font_instance(), and
 mark_image_instance() methods.
 * console-msw.c (console_type_create_mswindows):
 Remove mention of the mark_console() method.
 * console-tty.c (tty_initially_selected_for_input):
 Remove tty_mark_console ().
 * console-tty.c (console_type_create_tty):
 Remove mention of mark_consol().
 * console.c (common_init_complex_vars_of_console):
 * device-gtk.c:
 * device-gtk.c (console_type_create_device_gtk):
 Remove gtk_mark_device().
 * device-msw.c:
 Remove mswindows_mark_device(), msprinter_mark_device().
 * device-x.c:
 Remove x_mark_device().
 * file-coding.c:
 Remove chain_mark(), chain_mark_coding_stream_1(),
 chain_mark_coding_stream(), undecided_mark(), and
 undecided_mark_coding_stream().
 * file-coding.h (struct coding_system_methods):
 * file-coding.h (struct detector):
 Remove the mark methods from these structures.
 * fontcolor-msw.c:
 Remove mswindows_mark_color_instance(),
 mswindows_mark_font_instance(), 
 
 * fontcolor-tty.c:
 Remove tty_mark_color_instance(), tty_mark_font_instance().
 * fontcolor.c:
 Remove color_mark(), font_mark(), face_boolean_mark(),
 face_background_placement_mark().
 * frame-gtk.c:
 Remove gtk_mark_frame().
 * frame-msw.c:
 Remove mswindows_mark_frame(), msprinter_mark_frame().
 * frame-x.c:
 Remove x_mark_frame().
 * gc.c:
 Be clearer in the documentation here that we don't use mark
 methods at all.
 * gccache-x.h:
 Clarify how the hash table in the x_gc_cache is reachable for the
 GC.
 * glyphs.c:
 Remove image_mark().
 * gutter.c:
 Remove mark_gutters().
 * gutter.h:
 Remove its declaration.
 * intl-win32.c:
 Remove mswindows_multibyte_mark().
 * lisp.h:
 Remove declarations for mark_Lisp_Object_dynarr(),
 mark_buffer_syntax_cache().
 * lrecord.h:
 Update comments here to reflect that KKCC is the only mark
 algorithm and to update examples.
 * mule-ccl.c:
 Remove mark_ccl_program() from here.
 * mule-ccl.h:
 Remove its declaration.
 * mule-coding.c:
 Remove multibyte_mark_coding_stream(), multibyte_mark(),
 iso2022_mark_iso2022_coding_stream(),
 iso2022_mark_coding_stream(), iso2022_mark(),
 iso2022_mark_detection_state(), ccl_mark(), and
 ccl_mark_coding_stream().
 * redisplay.c:
 Remove mark_glyph_block_dynarr(), mark_redisplay_structs().
 * redisplay.h:
 Remove the declaration of mark_redisplay_structs().
 * specifier.h (struct specifier_methods):
 Remove the mark method.
 * syntax.c:
 Remove mark_buffer_syntax_cache().
2023年09月08日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor-tty.c:
 Add information to mark escape_fore, escape_back with KKCC.
2023年08月26日 Richard Hopkins <xemacs@unbit.co.uk>
 Use the escape sequence found during initialization rather than
 re-lookup during redisplay. This de-duplication should also help
 support hex/rgb codes in future as they won't be a key in
 color_alist.
 * redisplay-tty.c (set_foreground_to): Use provided escape
 sequence rather than re-lookup in color_alist.
 (set_background_to): Use provided escape sequence rather than
 re-lookup in color_alist.
 (tty_turn_on_face_1): Pass the escape sequence instead of color
 name to set_foreground_to / set_background_to.
 * fontcolor-tty.c (tty_initialize_color_instance): Populate
 escape_fore and escape_back with escape strings from color_alist.
 * fontcolor-tty.c (tty_mark_color_instance): Mark new escape_fore
 and escape_back.
 * fontcolor-tty-impl.h (struct tty_color_instance_data):
 (escape_fore): Add to hold ANSI escape sequence string.
 (escape_back): Add to hold ANSI escape sequence string.
 (COLOR_INSTANCE_TTY_ESCAPE_FORE): Wrapper for escape_fore.
 (COLOR_INSTANCE_TTY_ESCAPE_BACK): Wrapper for escape_back.
2023年08月10日 Aidan Kehoe <kehoea@parhasard.net>
 * lisp.h (portable_offsetof):
 Cast the result of this to Bytecount, rather than size_t, so its
 use (almost exclusively for the OFFSET field of struct
 memory_description) doesn't cause problems with clang++-11.
2023年08月06日 Richard Hopkins <xemacs@unbit.co.uk>
 * fontcolor-tty.c (Fregister_tty_color): Ensure rgb_vector_len is
 wrapped with #'make_integer for the "RGB-VECTOR must have a length
 of 3." error.
2023年08月05日 Richard Hopkins <xemacs@unbit.co.uk>
 
 Allow registering RGB values for TTY colors with the intention
 these can later be used to support HEX codes translation and
 fallback, along with 24-bit Trucolor support.
 * console-tty-impl.h (struct tty_console): Clairfy layout of
 color_alist for new rgb_vector element.
 * fontcolor-tty.c (Fregister_tty_color): Add new rgb_vector arg.
 This must be a 3-element vector with each element being an integer
 in the range 0-255; anything else signals an error. Update
 color_alist accordingly.
 * fontcolor-tty.c (Ffind_tty_color): Update result to include new
 rgb_vector.
 * redisplay-tty.c (set_background_to): Update reference to
 bg_string due to color_alist updates to handle rgb_vector.
 
2023年08月06日 Aidan Kehoe <kehoea@parhasard.net>
 * keymap.c (control_meta_superify): Make this available to other
 files.
 Add the modifiers in strictly descending numerical order, to allow
 #'canonicalize-keysym to minimise consing.
 * events.c (Fevent_modifiers):
 Use control_meta_superify () in this function, to ensure this
 function and #'canonicalize-keysym give consistent resutls.
 * keymap.c (Fcanonicalize_keysym):
 If KEYSYM is already in canonical form (including the order of its
 modifiers), return it.
 * lisp.h:
 Declare control_meta_superify () for files that are not keymap.c.
2023年08月05日 Aidan Kehoe <kehoea@parhasard.net>
 * event-stream.c (enum did_munge_result): New.
 Enumeration documenting the various munging of events that
 munge_keymap_translate() and friends may have done.
 * event-stream.c (this_command_keys_shift_translated): New.
 A boolean variable to allow handle-pre-motion-command and
 handle-post-motion-command to know whether
 retry-undefined-key-binding-unshifted has been necessary. Name
 from GNU, implementation our own.
 * event-stream.c (munge_keymap_translate):
 Implement the enumeration for DID_MUNGE.
 * event-stream.c (command_builder_find_leaf_no_jit_binding):
 Ditto.
 * event-stream.c (command_builder_find_leaf):
 Ditto.
 * event-stream.c
 (command_builder_find_leaf_and_update_global_state):
 Check DID_MUNGE for MUNGED_RETRY_UPSHIFTED, set
 this_command_keys_shift_translated to non-zero if appropriate.
 * event-stream.c (reset_this_command_keys):
 Set this_command_keys_shift_translated to zero.
 * event-stream.c (vars_of_event_stream):
 Make this-command-keys-shift-translated available to Lisp.
 * events.c (Fevent_key):
 Extend the docstring of this some more.
2023年07月31日 Aidan Kehoe <kehoea@parhasard.net>
 * doprnt.c (rewrite_rational_spec):
 Make the %z integer length modifier explicitly equivalent to the
 %l modifier when formatting for Lisp, avoid infinite loop.
2023年07月30日 Aidan Kehoe <kehoea@parhasard.net>
 Make algorithm used in #'find, #'position with :from-end and
 lists, strings the same as that with arrays; use
 list_position_cons_before() for the non :from-end list case, which
 is cheaper for the usual case where the test is #'eq and there is
 no key argument.
 * sequence.c:
 * sequence.c (list_position_cons_before):
 Update documentation for this function. Error if END and START are
 not valid bounding index designators, which it did not previously.
 * sequence.c (position):
 Call list_position_cons_before () and adjust the algorithm with
 :from-end and strings, lists as above.
 * sequence.c (Fdelete_duplicates):
 Be more careful about the END argument to
 list_position_cons_before () now that it's checked.
 * sequence.c (Fremove_duplicates):
 Be more careful about the END argument to
 list_position_cons_before () now that it's checked.
 * sequence.c (mismatch_list_string):
 * sequence.c (mismatch_list_array):
 * sequence.c (mismatch_string_array):
 Work around the compiler thinking an argument to make_integer ()
 with the ternary operator is non-idempotent in these functions, in
 passing.
2023年07月29日 Aidan Kehoe <kehoea@parhasard.net>
 * fontcolor-gtk.c (gtk_color_instance_rgb_components):
 Return something understood by Lisp (that is, three fixnums
 between 0 and 65535) under GTK3, rather than floats. 
 This fixes detection that a frame has a light background in
 #'get-frame-background-mode for me.
2023年07月22日 Richard Hopkins <xemacs@unbit.co.uk>
 * redisplay-tty.c (set_foreground_to):
 (set_background_to): Use console specific color_alist.
 * fontcolor.c (Fcolor_list): Provide device arg to #'color-list.
 * fontcolor-tty.c:
 (Vtty_color_alist): Remove; it's now an entry in struct
 tty_console.
 (Fregister_tty_color): Add new console arg. Use console specific
 color_alist.
 (Funregister_tty_color): Add new console arg. Use console
 specific color_alist.
 (Ffind_tty_color): Add new console arg. Use console specific
 color_alist.
 (tty_color_list): Add device arg. Use console specific
 color_alist.
 (tty_initialize_color_instance): Use existing device arg. Use
 console specific color_alist.
 (tty_valid_color_name_p): Use console specific color_alist.
 (vars_of_fontcolor_tty): Delete staticpro call for the now deleted
 Vtty_color_alist.
 * fontcolor-msw.c (mswindows_color_list): Add UNUSED device arg.
 * fontcolor-gtk.c (gtk_color_list): Add UNUSED device arg.
 * device-tty.c:
 (Qmake_device_late_tty_entry_point): New.
 (tty_finish_init_device): New. Call
 #'make-device-late-tty-entry-point.
 (syms_of_device_tty): DEFSYMBOL Qmake_device_late_tty_entry_point.
 (console_type_create_device_tty): Provide finish_init_device
 method.
 * console-tty.c (tty_console_data_description_1): Add entry for
 color_alist.
 (allocate_tty_console_struct): Set color_alist entry to Qnil.
 (tty_init_console): Set color_alist entry to Qnil.
 (tty_mark_console): Mark color_alist.
 * console-tty-impl.h (struct tty_console): Add color_alist
 entry.
 * console-impl.h (struct console_methods): Add device arg for
 color_list_method.
2023年06月17日 Aidan Kehoe <kehoea@parhasard.net>
 * file-coding.c (no_conversion_decode):
 * file-coding.c (no_conversion_encode):
 * unicode.c (unicode_decode):
 * unicode.c (unicode_encode):
 Restore the skip_ascii() optimization for the no-conversion and
 utf-8 coding systems, dropped in the course of the
 unicode-internal merge. This gives a 25% speedup on loading
 Unihan.txt as UTF-8, and a 33% speedup on loading it using
 no-conversion.
 Further work: add the skip_ascii() optimization to the multibyte
 code if the relevant charsets make that appropriate.
2023年05月17日 Richard Hopkins <xemacs@unbit.co.uk>
 * src/device-msw.c (mswindows_device_system_metrics): Update
 DM_num_color_cells calculation for non RC_PALETTE devices
 to use BITSPIXEL and cap it to 24-bits.
 The previous calculation using SIZEPALETTE could return 0 or
 256 even when many more colors are available. A consequence
 of this is that themes with (min-colors NUM) would not be
 respected. Under the same scenario this change now makes
 (device-color-cells) => 16777216, which also matches the
 result from GNU Emacs on the same setup. It may make sense
 to always use this calculation just like GNU does but for now
 respect the old calculation whilst more exposure is gained.
 The related commit in GNU Emacs was made available in the 24.3
 release.
 commit 821812e2477f45ac5f2572dd7d469b8408e351aa
 Author: Daniel Colascione <dancol@dancol.org>
 Date: Mon Oct 8 10:44:42 2012 -0800
 * w32fns.c (Fx_display_color_cells): Instead of using NCOLORS,
 which is broke under remote desktop, calculating the number of
 colors available for a display based on the display's number of
 planes and number of bits per pixel per plane. (bug#10397).

ChangeLog Entries from tests/ChangeLog

goto announcement, summary, changes

2025年06月14日 Aidan Kehoe <kehoea@parhasard.net>
 * XEmacs 21.5.36 "leeks" is released.
2025年06月03日 Alan Mackenzie <acm@muc.de>
 * automated/search-tests.el: Add tests for "\\>" and "\\_>" in the
 presence of characters with 'syntax-table extent properties.
2025年05月25日 Alan Mackenzie <acm@muc.de>
 * automated/regexp-tests.el: Add some tests for the PAREN argument
 of regexp-opt.
2025年05月24日 Alan Mackenzie <acm@muc.de>
 * automated/search-tests.el: Add tests for regexp buffer searches
 which use "\\_<" and "\\_>".
2025年05月24日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/lisp-tests.el (test-interactive):
 Check that compiled functions supplied as arguments to
 (interactive ...) in lambdas are not doubly-compiled.
2025年05月10日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/mule-tests.el: Test detection of coding cookies in
 this file. 
2025年05月07日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/regexp-tests.el:
 Test symbol boundary anchors, just added to regex.c, heavily
 inspired by the testing of the word boundaries. Use #'eql rather
 than #'= since if the test fails it will give a non-number
 result.
2025年03月20日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/lisp-tests.el (Assert-compare-buffer-substrings): New.
 Test #'compare-buffer-substrings, which just had its
 implementation revised to avoid O(N) calls to BUF_FETCH_CHAR(). 
 * automated/lisp-tests.el: Re-encode this file in UTF-8 now the
 non-mule build is gone and it is helpful to have Greek character
 literals. 
2025年03月06日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/regexp-tests.el:
 Move some code to test unicode-error-default-translation-table,
 unicode-invalid-sequence-regexp-range here from lisp/unicode.el.
2025年01月13日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/call-interactively.el:
 New file, initial testing of the string (interactive) specs.
2025年01月06日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/mule-tests.el:
 Test resize_string() with big, small strings.
2023年10月18日 Richard Hopkins <xemacs@unbit.co.uk>
 * automated/color-tests.el: Add tests for rgb:hex/hex/hex variants
 and 3 digit per component #hex variant. Also test the same result
 is obtained for different forms of the same color.
2023年10月17日 Richard Hopkins <xemacs@unbit.co.uk>
 * automated/color-tests.el: Test single hex digit per component.
2023年10月16日 Richard Hopkins <xemacs@unbit.co.uk>
 * automated/color-tests.el: Test white variants in formats
 #fefefe, component range [0.0, 1.0], and [0-255].
2023年10月15日 Richard Hopkins <xemacs@unbit.co.uk>
 * automated/color-tests.el: New. Ensure colors read from rgb.txt
 are scaled correctly by testing "white". Skip the test when
 rgb.txt is unavailable.
2023年09月30日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/event-tests.el: New.
 Test a bug just fixed with #'event-modifiers and motion
 events. Test misc-user events too in passing.
2023年08月06日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/region-tests.el:
 Further tests of shifted-motion handling, checking that varying
 values for `shifted-motion-keys-select-region' and `zmacs-region'
 are respected.
 * automated/keymap-tests.el:
 Test `canonicalize-keysym', just updated to cons much less and to
 return modifiers in a canonical order.
2023年08月05日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/region-tests.el:
 Test the shifted-motion handling, ensure a recently-reported bug
 associated with function-key-map entries for end, home and friends
 has not regressed.
2023年07月31日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/format-tests.el:
 Test the %z integer length modifier explicitly, check that it is
 equivalent to the %l modifier when supplied to Lisp.
2023年07月30日 Aidan Kehoe <kehoea@parhasard.net>
 * automated/lisp-tests.el (probe-bounds-of-aref):
 Add some non-ASCII content when testing bounds with #'position and
 friends.

goto announcement, summary, changes

Made with XEmacs!
Valid XHTML 1.0!
Checked by Linklint
Site content repository:
bitbucket.org Logo
Primary mirrors:
SourceForge Logo This page is part of the XEmacs website <https://www.xemacs.org>
Contents copyright © 2000 -- 2017; all rights reserved.
Missing links, inquiries about implementation, kudos to: webmaster@xemacs.org
Discussion of XEmacs features, installation, problems: XEmacs mailing lists
This page last modified Sun Jun 15 10:47:20 2025 UTC.

Conform with <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Automatically validated by PSGML

AltStyle によって変換されたページ (->オリジナル) /