1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-31 11:10:51 -07:00
Commit graph

981 commits

Author SHA1 Message Date
Helmut Eller
eee0010938 Revert "Add "flat" representation for bignums"
This reverts commit ddba4198ab.
2025-11-26 09:34:00 +01:00
Helmut Eller
ddba4198ab Add "flat" representation for bignums
If FLAT_BIGNUMS is defined, Lisp_Bignums are a vector of GMP limbs
instead of a mpz_t (i.e. pointer to limb array).

The primary difficulty was the changed return type of the bignum_val
function.  The idiom "*bignum_val (foo)" was used all over the place.
For the flat representation, it seems impossible to define bignum_val
such that it returns a pointer.  I changed the return type to a struct,
but that made it necessary to change the idiom to "bignum_val (foo).z".

* src/bignum.h (FLAT_BIGNUMS): Define if HAVE_MPS.
(struct Lisp_Bignums): Define alternative representation.
(struct bignum_val): New helper struct.
(bignum_val): Change return type and define different version for flat
bignums.
(bignum_integer): Define a separate version for flat bignums.
(BIGNUM_VAL): New macro.
(init_gmp_memory_functions): New.  Define the prototype here for a
function that is implemented in alloc.c.
(mpz_set_integer): Update for changed xbignum_val.
* src/bignum.c (init_bignum): Call init_gmp_memory_functions.
(make_bignum_from_mpz): New helper.
(make_bignum_bits, make_bignum_str): Adapted for flat bignums.
(bignum_to_double, bignum_to_uintmax, bignum_bufsize, bignum_to_c_string)
(get_random_bignum): Adapt to changed bignum_val.
* src/alloc.c (xmalloc_for_gmp): New.
(xrealloc_for_gmp, xfree_for_gmp): Moved here from bignum.c.  Call
tally_consing.
(init_gmp_memory_functions): New.
(cleanup_vector): Adapt to flat bignums.
* src/data.c (Fnatnump, arithcompare, Fminus, integer_remainder)
(Flogcount, Fash, expt_integer, Fadd1, Fsub1, Flognot): Adapt to changed
bignum_val.
* src/emacs-module.c (module_extract_big_integer): Adapt to changed
bignum_val.
* src/floatfns.c (Fabs, Flogb): Adapt to changed bignum_val.
* src/fns.c (Frandom, Ftake, Fntake, Fnthcdr, Fmemql, Feql)
(internal_equal_1, value_cmp, sxhash_bignum): Adapt to changed
bignum_val.
* src/igc.c (finalize_bignum, finalize_vector, maybe_finalize): Adapt to
flat bignums.
* src/pdumper.c (dump_bignum): Define separate version for flat bignums.
(dump_cold_bignum, dump_do_dump_relocation): Adapt to changed
bignum_val.
* src/timefns.c (ztrillion, ticks_hz_to_timespec, ticks_hz_hz_ticks)
(lispint_arith): Adapt to changed bignum_val.
2025-11-25 20:21:28 +01:00
Helmut Eller
e6ae5433df Merge branch 'master' into feature/igc 2025-11-25 20:19:43 +01:00
Paul Eggert
cada1c3192 Fix more mis-declarations of non-const functions
Problem reported by Helmut Eller in:
https://lists.gnu.org/r/emacs-devel/2025-11/msg00809.html
* src/data.c (Fsymbol_with_pos_p, Fnatnump):
* src/fns.c (Fproper_list_p):
* src/gnutls.c (Fgnutls_errorp):
Now pure, not const.
2025-11-20 09:11:59 -08:00
Paul Eggert
20fd47e741 Fix mis-declarations of non-const functions
Problem for mpz_get_d_rounded reported by Helmut Eller in:
https://lists.gnu.org/r/emacs-devel/2025-11/msg00795.html
* lib-src/make-docfile.c (DEFUN_pure): New constant.
(write_globals, scan_c_stream): Support "attributes: pure".
* src/bignum.h (mpz_get_d_rounded):
* src/data.c (Fsymbolp, Fmodule_function_p, Fintegerp, Fnumberp):
* src/lisp.h (bignum_to_double, bignum_to_intmax)
(bignum_to_uintmax, bignum_bufsize):
Now pure, not const, since they depend on current state.
For example, Fsymbolp now inspects symbols_with_pos_enabled,
and the bignum functions inspect bignum contents in memory.
* src/data.c (Feq):
* src/xfaces.c (Fface_attribute_relative_p):
No longer const, since they might abort when debugging.
* src/pdumper.h (pdumper_object_p, pdumper_cold_object_p)
(pdumper_find_object_type, pdumper_object_p_precise):
These are not const functions.  But there is no need to declare
them to be pure, either, as they’re inline so the compiler can
figure it out.
2025-11-19 16:21:24 -08:00
Helmut Eller
98e1b11f16 Merge branch 'master' into feature/igc 2025-10-04 16:41:45 +02:00
Pip Cet
020e2f5ddb Change EQ to move slow code path into a separate function
* src/data.c (slow_eq): New function.
    * src/lisp.h (EQ): Call it.
2025-09-22 10:28:40 +02:00
Gerd Möllmann
fa71ca0e22 Merge branch 'master' into feature/igc 2025-09-04 05:18:12 +02:00
Mattias Engdegård
985657e515 ; * src/data.c (Fash): GCC argument signedness quibble 2025-09-01 15:13:58 +02:00
Mattias Engdegård
bbc9ed3871 * src/data.c (Fash): Speed up when argument and result are fixnums. 2025-09-01 14:20:04 +02:00
Gerd Möllmann
7d7ecea0eb Merge branch 'master' into feature/igc 2025-08-24 12:15:10 +02:00
Mattias Engdegård
308e3ab1db Disallow string data resizing (bug#79784)
Only allow string mutation that is certain not to require string data to
be resized and reallocated: writing bytes into a unibyte string, and
changing ASCII to ASCII in a multibyte string.

This ensures that mutation will never transform a unibyte string to
multibyte, that the size of a string in bytes never changes, and that
the byte offsets of characters remain the same.  Most importantly, it
removes a long-standing obstacle to reform of string representation and
allow for future performance improvements.

* src/data.c (Faset): Disallow resizing string mutation.
* src/fns.c (clear_string_char_byte_cache):
* src/alloc.c (resize_string_data):  Remove.
* test/src/data-tests.el (data-aset-string): New test.
* test/lisp/subr-tests.el (subr--subst-char-in-string):
Skip error cases.
* test/src/alloc-tests.el (aset-nbytes-change):
Remove test that is no longer relevant.
* doc/lispref/strings.texi (Modifying Strings):
* doc/lispref/sequences.texi (Array Functions):
* doc/lispref/text.texi (Substitution):  Update manual.
* etc/NEWS: Announce.
2025-08-24 10:28:27 +02:00
Gerd Möllmann
a0757e0ac0 Merge branch 'master' into feature/igc 2025-07-31 09:42:08 +02:00
Stefan Monnier
f8b9d80ec6 comp.el: Fix minor corner-case annoyances
* lisp/emacs-lisp/comp.el (comp--native-compile): Avoid `%s`
on objects that may not have names.
* src/data.c (Ffset): Don't compute trampoline for no-op `fset`.
2025-07-17 12:36:57 -04:00
Pip Cet
7cf4f61fc5 Merge from 'savannah/master' 2025-03-18 12:13:58 +00:00
Po Lu
2250dafff9 Merge from savannah/emacs-30
9065423e70 ; Improve documentation of 2 symbol-related functions
2025-03-06 21:55:41 +08:00
Eli Zaretskii
9065423e70 ; Improve documentation of 2 symbol-related functions
* src/data.c (Fremove_pos_from_symbol, Fbare_symbol): Doc fixes.
(Bug#75290)
2025-03-06 12:52:05 +02:00
Stefan Kangas
678fdcc165 ; Grammar fixes for "native-compiled"
1. Prefer "native-compiled" to "native compiled".
The adjective "native-compiled" with the hyphen is generally more
consistent with the typical pattern in English, especially when the
compound modifies a noun (e.g., "native-compiled code").

2. Prefer "natively compiled" to "natively-compiled".
The adverb "natively" modifies "compiled", and it is standard not
to hyphenate an adverb + adjective combination when the adverb ends
in -ly (e.g., "code that is natively compiled").

For example, note that we say "high-speed internet" but "highly
performant code".

* Makefile.in (dest):
* configure.ac (HAVE_NATIVE_COMP):
* doc/emacs/building.texi (Lisp Libraries):
* doc/lispref/compile.texi (Native Compilation)
(Native-Compilation Functions, Native-Compilation Variables):
* doc/lispref/functions.texi (What Is a Function, Declare Form):
* doc/lispref/loading.texi (How Programs Do Loading, Library Search):
* etc/NEWS:
* etc/NEWS.28:
* etc/NEWS.29:
* etc/NEWS.30:
* lisp/emacs-lisp/comp-common.el (native-comp-never-optimize-functions)
(comp-function-type-spec):
* lisp/emacs-lisp/comp-cstr.el:
* lisp/subr.el (locate-eln-file):
* src/comp.c (SETJMP_NAME, syms_of_comp):
* src/data.c (Fsubrp, Fnative_comp_function_p, Fsubr_native_lambda_list):
* src/lread.c (Fload):
* src/pdumper.c (dump_do_dump_relocation):
* test/src/comp-tests.el (lambda-return2): Avoid grammatically incorrect
variations on "natively compiled" and "native-compiled".  (Bug#56727)
2025-02-28 20:20:55 +01:00
Pip Cet
6dcb99a2b8 Merge 'master' into 'feature/igc' 2025-02-01 12:48:57 +00:00
Stefan Kangas
bf97946d7d Merge branch 'scratch/no-purespace' into 'master' 2025-02-01 04:56:52 +01:00
Pip Cet
6f7e916a6c Merge branch 'master' into feature/igc 2025-01-31 16:40:29 +00:00
Robert Pluim
14e686e6cc Signal error when keyword/arg list is malformed
* src/data.c (syms_of_data): Add Qmalformed_keyword_arg_list
error symbol.

* src/process.c (Fmake_process, Fmake_pipe_process)
(Fserial_process_configure, Fmake_serial_process)
(Fmake_network_process): Signal Qmalformed_keyword_arg_list when
the argument list length is odd.
* src/sound.c (parse_sound): Also here..
* src/w32fns.c (Fw32_notification_notify): ..and here.

(Bug#75584)
2025-01-21 17:41:35 +01:00
Stefan Kangas
278d1994af Remove redundant case_Lisp_Int macro
The case_Lisp_Int macro was originally introduced with different
definitions depending on USE_2_TAGS_FOR_INTS.  However, since commit
2b57012478, we have assumed that USE_2_TAGS_FOR_INTS is always
defined, and the macro has only a single definition.  As a result, the
macro is now unnecessary, and replacing it with standard C case labels
improves readability and understanding.

* src/lisp.h (case_Lisp_Int): Delete macro.
* src/alloc.c (process_mark_stack, survives_gc_p):
* src/data.c (Fcl_type_of):
* src/fns.c (value_cmp, sxhash_obj):
* src/pdumper.c (dump_object):
* src/print.c (print_object):
* src/xfaces.c (face_attr_equal_p): Remove uses of above macro.
2025-01-20 02:14:08 +01:00
Gerd Möllmann
c19d702b3b Merge branch 'master' into feature/igc 2025-01-19 15:52:10 +01:00
Stefan Kangas
251e3d2654 Replace call[1-8] with calln
Since the introduction of the 'calln' macro, the 'call1', 'call2', ...,
'call8' macros are just aliases for the former.  This is slightly
misleading and potentially unhelpful.  The number of arguments N can
also easily go out-of-synch with the used alias callN.  There is no
reason not to replace these aliases with using 'calln' directly.

To reduce the risk for mistakes, the tool Coccinelle was used to make
these changes.  See <https://coccinelle.gitlabpages.inria.fr/website/>.

* src/alloc.c, src/androidvfs.c, src/androidfns.c, src/buffer.c:
* src/callint.c, src/callproc.c, src/casefiddle.c, src/charset.c:
* src/chartab.c, src/cmds.c, src/coding.c, src/composite.c:
* src/data.c, src/dbusbind.c, src/dired.c, src/doc.c:
* src/emacs.c, src/eval.c, src/fileio.c, src/filelock.c:
* src/fns.c, src/frame.c, src/gtkutil.c, src/haikufns.c:
* src/haikumenu.c, src/image.c, src/insdel.c, src/intervals.c:
* src/keyboard.c, src/keymap.c, src/lisp.h, src/lread.c:
* src/minibuf.c, src/nsfns.m, src/nsselect.m, src/pgtkfns.c:
* src/pgtkselect.c, src/print.c, src/process.c, src/sort.c:
* src/syntax.c, src/textconv.c, src/textprop.c, src/undo.c:
* src/w32fns.c, src/window.c, src/xfaces.c, src/xfns.c:
* src/xmenu.c, src/xselect.c, src/xterm.c:
Replace all uses of 'call1', 'call2', ..., 'call8' with 'calln'.
2025-01-19 14:29:41 +01:00
Gerd Möllmann
528f711406 Merge branch 'master' into scratch/igc 2025-01-15 09:14:06 +01:00
Stefan Kangas
383de5c3f6 Prefer calln to CALLN where applicable
* src/callint.c (read_file_name):
* src/comp.c (CALL0I, CALL1I, CALL2I, CALL4I, declare_imported_func):
* src/data.c (Ffset, notify_variable_watchers):
* src/eval.c (Ffuncall_with_delayed_message):
* src/keymap.c (Fdescribe_buffer_bindings):
* src/minibuf.c (Fread_buffer, Fcompleting_read):
* src/pdumper.c (Fdump_emacs_portable):
* src/print.c (print_vectorlike_unreadable):
* src/treesit.c (treesit_traverse_match_predicate)
(treesit_build_sparse_tree): Prefer calln to CALLN.
2025-01-14 00:16:40 +01:00
Gerd Möllmann
2838be3fd5 Merge branch 'master' into scratch/igc 2025-01-08 04:04:49 +01:00
Stefan Kangas
7fa975adbc Update copyright year to 2025
Run "TZ=UTC0 admin/update-copyright".
2025-01-02 18:39:42 +01:00
Paul Eggert
4da38c6321 Update copyright year to 2025
Run "TZ=UTC0 admin/update-copyright".
2025-01-01 07:39:17 +00:00
Pip Cet
5ec8696663 Pure storage removal: Replace calls to removed functions
* src/alloc.c (string_bytes, pin_string, valid_lisp_object_p)
(process_mark_stack, survives_gc_p, syms_of_alloc):
* src/androidterm.c (android_term_init): Replace call to
'build_pure_c_string'.
* src/buffer.c (init_buffer_once, syms_of_buffer):
* src/bytecode.c (exec_byte_code):
* src/callint.c (syms_of_callint):
* src/callproc.c (syms_of_callproc):
* src/category.c (Fdefine_category):
* src/coding.c (syms_of_coding):
* src/comp.c (Fcomp__compile_ctxt_to_file0)
(maybe_defer_native_compilation, syms_of_comp):
* src/data.c (Fsetcar, Fsetcdr, Fdefalias, Faset, syms_of_data):
* src/dbusbind.c (syms_of_dbusbind):
* src/doc.c (Fsnarf_documentation):
* src/emacs-module.c (syms_of_module):
* src/eval.c (Finternal__define_uninitialized_variable)
(Fdefconst_1, define_error, syms_of_eval):
* src/fileio.c (syms_of_fileio):
* src/fns.c (Ffillarray, Fclear_string, check_mutable_hash_table):
* src/fontset.c (syms_of_fontset):
* src/frame.c (make_initial_frame):
* src/haikufns.c (syms_of_haikufns):
* src/intervals.c (create_root_interval):
* src/keyboard.c (syms_of_keyboard):
* src/keymap.c (Fmake_sparse_keymap, Fset_keymap_parent)
(store_in_keymap, syms_of_keymap):
* src/lisp.h:
* src/lread.c (Fload, read0, intern_c_string_1, define_symbol)
(Fintern, defsubr, syms_of_lread):
* src/pdumper.c (Fdump_emacs_portable):
* src/pgtkfns.c (syms_of_pgtkfns):
* src/pgtkterm.c (syms_of_pgtkterm):
* src/process.c (syms_of_process):
* src/search.c (syms_of_search):
* src/sqlite.c (syms_of_sqlite):
* src/syntax.c (syms_of_syntax):
* src/treesit.c (syms_of_treesit):
* src/w32fns.c (syms_of_w32fns):
* src/xdisp.c (syms_of_xdisp):
* src/xfaces.c (syms_of_xfaces):
* src/xfns.c (syms_of_xfns):
* src/xftfont.c (syms_of_xftfont):
* src/xterm.c (syms_of_xterm): Remove calls to 'PURE_P', 'CHECK_IMPURE',
'Fpurecopy', and replace calls to 'build_pure_c_string', 'pure_list',
'pure_listn', etc., by impure equivalents.
2024-12-12 22:48:11 +01:00
Pip Cet
f84ccff5a6 Pure storage removal: Main part
* src/alloc.c (pure, PUREBEG, purebeg, pure_size)
(pure_bytes_used_before_overflow, pure_bytes_used_lisp)
(pure_bytes_used_non_lisp): Remove definitions.
(init_strings): Make empty strings impure.
(cons_listn): Drop 'cons' argument.
(pure_listn): Remove function.
(init_vectors): Allocate zero vector manually to avoid freelist issues.
(pure_alloc, check_pure_size, find_string_data_in_pure)
(make_pure_string, make_pure_c_string, pure_cons, make_pure_float)
(make_pure_bignum, make_pure_vector, purecopy_hash_table): Remove
functions.
(purecopy): Reduce to hash consing our argument.
(init_alloc_once_for_pdumper): Adjust to lack of pure space.
(pure-bytes-used): Adjust docstring to mark as obsolete.
(purify-flag): Keep for hash consing, but adjust docstring.
* src/bytecode.c:
* src/comp.c: Don't include "puresize.h".
* src/conf_post.h (SYSTEM_PURESIZE_EXTRA): Remove definition.
* src/data.c (pure_write_error): Remove function.
* src/deps.mk: Remove puresize.h dependency throughout.
* src/emacs.c:
* src/fns.c:
* src/intervals.c:
* src/keymap.c: Don't include "puresize.h".
* src/lisp.h (struct Lisp_Hash_Table): Adjust comment.
(pure_listn, pure_list, build_pure_c_string): Remove.
* src/w32heap.c (FREEABLE_P): Don't do use 'dumped_data'.
(malloc_before_dump, realloc_before_dump, free_before_dump): Remove
functions.
* src/w32heap.h: Adjust prototype.
* lisp/loadup.el:
* lisp/startup.el: Remove purespace code.
2024-12-12 22:48:11 +01:00
Eli Zaretskii
9bc6362d6e Merge from origin/emacs-30
98796f95fa Work on proced-tests.el
8a4d13e370 ; * doc/lispref/frames.texi (Yanking Media): Add index en...
0aae02a374 * lisp/files.el (require-with-check): Be a bit more lenie...
cc6a11f483 (with-peg-rules): Fix references to rulesets (bug#74018)
70f084db2f ; * etc/NEWS: Fix typo (bug#74066).
9e1abf11fc Tweak doc w.r.t to "void function" (bug#73886)
7a8ca202c5 Fix flakey proced refine tests (Bug#73441)
55a8cec013 Another 'void' update
2024-11-02 08:34:42 -04:00
Stefan Monnier
9e1abf11fc Tweak doc w.r.t to "void function" (bug#73886)
* doc/lispref/functions.texi (Function Cells): Avoid talking
about the function cell being void.

* src/data.c (Fboundp, Ffmakunbound, Fsymbol_function):
Don't suggest that "void" can be considered as a kind of value.
2024-10-27 14:52:25 -04:00
Eli Zaretskii
aeaeccbe32 Merge from origin/emacs-30
c78b4d2b31 Fix doc string of 'wdired-use-dired-vertical-movement'
b0aaee93fd Update the documentation of void functions
299a1f2407 ; * lisp/vc/log-edit.el (log-edit-diff-function): Grammar...
67a27ff53b ; Fix typos
2024-10-27 08:23:06 -04:00
Eli Zaretskii
b0aaee93fd Update the documentation of void functions
* doc/lispref/functions.texi (Function Cells):
* src/data.c (Ffboundp, Ffmakunbound, Fsymbol_function): Update
documentation to the changes of how void functions are represented
since Emacs 24.5.  (Bug#73886)
2024-10-27 13:16:36 +02:00
Gerd Möllmann
d864c26b20 Merge branch 'master' into scratch/igc 2024-10-19 04:50:24 +02:00
Eli Zaretskii
661e5dec57 Merge from origin/emacs-30
5c9de704cc ; * admin/make-tarball.txt: Minor copyedits.
3fc1635783 ; * doc/lispref/strings.texi (Text Comparison): Improve i...
45a78ec6c5 * lisp/files.el (require-with-check): Improve error messa...
9a04b99b3d ; * src/data.c (Fsubrp): Improve docstring.
4f3e8c3b4e Improve documentation of ERT
ed8904937e Disambiguate minor-mode variable in its function docstring
505139e0ba Fix project-dired keybinding in manual
9bedb957be Improve documentation of time-parsing functions

# Conflicts:
#	doc/lispref/os.texi
#	lisp/calendar/iso8601.el
#	lisp/calendar/parse-time.el
2024-08-17 02:47:38 -04:00
Mattias Engdegård
8db72a8d4b Replace some EQ with BASE_EQ
* src/eval.c (FletX, Flet, funcall_lambda)
(let_shadows_buffer_binding_p):
* src/data.c (set_blv_found, set_internal, default_value)
(set_default_internal, Flocal_variable_p):
* src/buffer.c (Fkill_buffer):
(mouse_face_overlay_overlaps, compare_overlays)
(report_overlay_modification):
BASE_EQ is safe because we don't actually compare symbols here.
2024-08-15 16:02:17 +02:00
Andrea Corallo
9a04b99b3d ; * src/data.c (Fsubrp): Improve docstring. 2024-08-15 10:54:26 +02:00
Gerd Möllmann
6a137e0c1d Merge branch 'master' into scratch/igc 2024-08-05 06:32:17 +02:00
Mattias Engdegård
7753a597fb Reduce type checks in arithcompare
* src/data.c (coerce_marker, not_number_or_marker): New.
(arithcompare): Don't use NUMBERP to check types up-front since we
are going to branch on types anyway.
2024-07-27 14:58:59 +02:00
Mattias Engdegård
e5a9449117 * src/data.c (arithcompare): Simplify fixnum/bignum comparisons.
Noticed by Pip Cet.
2024-07-27 14:58:59 +02:00
Mattias Engdegård
2fd38e5c49 Simplify and speed up numeric comparisons
This makes comparison functions (=, /=, <, <=, >, >=, min, max) quite
a bit faster (10-20 %).  Bytecode ops on fixnums are not affected,
nor is `value<`.

* src/data.c (arithcompare): Simplify the code to reduce the number of
branches.  Remove the comparison code argument; instead, return the
relation encoded as bits, which can be tested cheaply.  All callers
adapted.
* src/lisp.h (enum Arith_Comparison): Remove.
(Cmp_Bit_*, cmp_bits_t): New.
2024-07-27 12:04:09 +02:00
Po Lu
da0165a01e Prohibit unbinding of built-in variables
* src/data.c (set_internal): Signal error if a BLV with a
redirect or a forwarded symbol is being unbound.

* test/src/data-tests.el (binding-test-makunbound-built-in): New
test.
2024-07-22 09:56:08 +08:00
Pip Cet
c6a3eb01f7 MPS weak-key hash table support
Introduce a new PVEC type for weak hash tables (if HAVE_MPS) and
handle them somewhat differently from strong hash tables to match
MPS conventions.

* src/print.c (print_vectorlike_unreadable, print_object):
Handle weak hash tables.
* src/pdumper.c (dump_enqueue_object, dump_field_lv_or_rawptr)
(dump_vectorlike): Handle weak hash tables.
* src/lisp.h (enum pvec_type): Add PVEC_WEAK_HASH_TABLE.
(union Lisp_Weak_Hash_Table_Entry, struct
Lisp_Weak_Hash_Table_Strong_Part, struct
Lisp_Weak_Hash_Table_Weak_Part): New types.
(WEAK_HASH_TABLE_P, XWEAK_HASH_TABLE)
(make_lisp_weak_hash_table)
(WEAK_HASH_KEY, WEAK_HASH_VALUE, WEAK_HASH_HASH)
(WEAK_HASH_TABLE_SIZE, weak_hash_table_index_size)
(set_weak_hash_key_slot, set_weak_hash_value_slot)
(weak_hash_from_key): New functions.
(DOHASH_WEAK, DOHASH_WEAK_SAFE): New macros.
* src/igc.h: (enum igc_obj_type): Add
IGC_OBJ_WEAK_HASH_TABLE_WEAK_PART,
IGC_OBJ_WEAK_HASH_TABLE_STRONG_PART.
* src/igc.c (obj_type_names): Add
IGC_OBJ_WEAK_HASH_TABLE_WEAK_PART,
IGC_OBJ_WEAK_HASH_TABLE_STRONG_PART.
(pvec_type_names): Add PVEC_WEAK_HASH_TABLE.
(IGC_TYPE_BITS, IGC_HASH): Adjust for more than 32 types.
(struct igc_thread): New allocation points for weak hash tables.
(struct igc): New fmt and pool for weak hash tables.
(dflt_scan_obj): Handle weak hash tables.
(fix_weak_hash_table, fix_weak_hash_table_strong_part)
(fix_weak_hash_table_weak_part): New functions.
(fix_vector): Handle weak hash tables.
(fix_vector_weak): Handle weak hash tables.
(create_weak_hash_ap, create_thread_aps): Create allocation
points for weak hash tables.
(igc_thread_remove): Destroy allocation points for weak hash
tables.
(finalize_vector, finalize, maybe_finalize): Handle weak hash
tables.
(thread_ap): Use allocation points for weak hash tables.
(weak_hash_find_dependent): New function.
(Figc_info): Walk weak hash pool.
(make_pool_with_class): Add new argument for
find-dependent-object function.
(make_pool_amc, make_pool_ams, make_pool_awl, make_pool_amcz):
Adjust to new argument.
(make_igc): Create weak hash fmt and pool.
* src/fns.c (make_hash_table): Use
make_weak_hash_table for weak hash tables.
(hash_table_thaw): Assert we're looking at a strong hash table.
(set_weak_hash_next_slot, set_weak_hash_hash_slot)
(set_weak_hash_index_slot, check_maybe_weak_hash_table)
(WEAK_HASH_NEXT, WEAK_HASH_INDEX, allocate_weak_hash_table)
(strengthen_hash_table, strengthen_hash_table_for_dump)
(make_weak_hash_table, weak_hash_index_index)
(maybe_resize_weak_hash_table, weak_hash_lookup_with_hash)
(weak_hash_lookup, weak_hash_put, weak_hash_remove_from_table)
(weak_hash_splat_from_table, weak_hash_clear): New functions.
(Fhash_table_count, Fhash_table_p, Fclrhash, Fgethash, Fputhash)
(Fremhash, Fmaphash): New functions.
* src/data.c (Fcl_type_of): Handle weak hash tables.
* src/alloc.c (purecopy): Handle weak hash tables.
2024-07-01 17:08:18 +00:00
Helmut Eller
489d4711a8 Move the Lisp_Fwd.bufoffset field back to the union
* src/lisp.h (struct Lisp_Fwd): With the predicate enum, we can now pack
the offset and the predicate into a one-word struct.
(XBUFFER_OFFSET): Use the new field name.
* src/buffer.c (DEFVAR_PER_BUFFER): Create the one-word struct.
* src/data.c (store_symval_forwarding): Use the new field name.
2024-06-24 18:10:41 +02:00
Helmut Eller
2ef995c591 Introduce an enum Lisp_Fwd_Predicate
Using an enum instead of a symbol makes it obvious that this field is
of no concern to the GC.

* src/lisp.h (enum Lisp_Fwd_Predicate): New.
(struct Lisp_Fwd): Use it instead of a symbol.
* src/buffer.c (DEFVAR_PER_BUFFER): Create the necessary enum constant
instead of a symbol.
* src/data.c (check_fwd_predicate, check_choice): New helpers.
(store_symval_forwarding): Use it.
2024-06-24 05:32:53 +02:00
Helmut Eller
314fdc45ad Remove struct Lisp_Buffer_Objfwd
* src/lisp.h (struct Lisp_Buffer_Objfwd): Deleted.
(struct Lisp_Fwd): Add the fields bufoffset and bufpredicate.
Make the type a 1-byte bitfield so that the entire struct still
fits in two words.
(XBUFFER_OFFSET): Renamed from XBUFFER_OBJFWD.
* src/buffer.c (DEFVAR_PER_BUFFER, defvar_per_buffer)
(buffer_local_value): Update accordingly.
* src/data.c (do_symval_forwarding, store_symval_forwarding)
(set_internal, default_value, set_default_internal)
(Fmake_local_variable, Fkill_local_variable, Flocal_variable_): Use
XBUFFER_OFFSET.
2024-06-23 18:21:54 +02:00
Helmut Eller
7f25cfd09a Remove struct Lisp_Kboard_Objfwd
* src/lisp.h (struct Lisp_Kboard_Objfwd): Deleted ...
(struct Lisp_Fwd): ... replaced with field kbdoffset.
(DEFVAR_KBOARD): Use new field.
* src/data.c (XKBOARD_OFFSET): Renamed from XKBOARD_OBJFWD.
(do_symval_forwarding, store_symval_forwarding
(set_default_internal): Use it .
2024-06-23 18:21:54 +02:00