Files
emacs/src
Mattias Engdegård cd3727f7e0 Speed up low-level parts of the reader and refactor
Inspect the given 'readcharfun' source once, before using it, instead of
for each character read.  This moves a bunch of branches away from the
critical path, with separate functions for different source types.
Replace some preprocessor macros with functions.

* src/lread.c (READCHAR, UNREAD, READCHAR_REPORT_MULTIBYTE)
(FROM_FILE_P): Remove; use corresponding functions instead.
All callers adapted.
(source_t): New struct that takes the place of the `readcharfun` and
`readbyte` arguments in many places.
(init_source)
(source_buffer_get, source_buffer_unget)
(source_marker_get, source_marker_unget)
(source_string_get, source_string_unget)
(source_file_get, source_file_unget)
(source_function_get, source_function_unget)
(from_file_p, unreadbyte_from_file):
New.
(readbyte_from_stdio): Replace `readbyte_from_file`.
(readchar, unreadchar): Rewrite.
(lisp_file_lexical_cookie, readevalloop, read_internal_start):
Create a source_t for use during reading.  All signatures and functions
called adapted.
(read_char_escape): Remove check for an error that can no longer occur.
2025-07-10 10:24:58 +02:00
..
2025-01-02 18:39:42 +01:00
2025-01-12 08:46:28 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-03-22 11:57:29 -07:00
2025-01-02 18:39:42 +01:00
2025-04-19 19:31:26 -07:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2024-08-22 00:51:55 +02:00
2025-03-12 09:38:33 +08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-04-19 19:31:26 -07:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-03-06 21:55:41 +08:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-02-22 14:48:29 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-07-06 19:15:51 -04:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-02-21 13:32:14 +08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-04-19 19:31:26 -07:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-09 05:13:28 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-03-10 09:33:17 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-03-09 13:20:02 +08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-02-22 14:48:29 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-27 09:11:21 +08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-02-28 19:54:46 +08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-19 14:29:41 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-05-26 19:53:21 +03:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-06-14 16:56:44 +03:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-26 23:05:50 -08:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00
2025-01-02 18:39:42 +01:00

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Copyright (C) 2001-2025 Free Software Foundation, Inc.
See the end of the file for license conditions.


This directory contains the source files for the C component of GNU Emacs.
Nothing in this directory is needed for using Emacs once it is built
and installed, if the dumped Emacs is copied elsewhere.

See the files ../README and then ../INSTALL for installation instructions.

The file 'Makefile.in' is used as a template by the script
'../configure' to produce 'Makefile'.  This is the file which actually
controls the compilation of Emacs C source files.  All of this should
work transparently; you should only need to change to the parent
directory, run './configure', and then run 'make'.

This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.