|
|||||||||||||||||
Searching XEmacs
Quick Links
About XEmacs
|
XEmacs 21.5.36 "leeks" is releasedgoto 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 ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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/ChangeLoggoto 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 |
||||||||||||||||
![]() ![]() |
|
||||||||||||||||
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