[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pkg 51cd0e05d6 71/76: De-duplicate packages for mapatoms
From: |
Gerd Moellmann |
Subject: |
pkg 51cd0e05d6 71/76: De-duplicate packages for mapatoms |
Date: |
Fri, 21 Oct 2022 00:16:19 -0400 (EDT) |
branch: pkg
commit 51cd0e05d64bf5d8142036af6e697cec67c859c0
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>
De-duplicate packages for mapatoms
---
src/pkg.c | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/pkg.c b/src/pkg.c
index bf59b9e4fe..fe3199244c 100644
--- a/src/pkg.c
+++ b/src/pkg.c
@@ -436,9 +436,20 @@ static void
pkg_map_package_symbols (Lisp_Object fn, Lisp_Object package)
{
package = pkg_package_or_lose (package);
- FOR_EACH_KEY_VALUE (it_symbol, PACKAGE_SYMBOLS (package))
- call1 (fn, it_symbol.key);
+ FOR_EACH_KEY_VALUE (it, PACKAGE_SYMBOLS (package))
+ call1 (fn, it.key);
+}
+
+/* Return a list of all registered packages. */
+static Lisp_Object
+pkg_list_all_packages (void)
+{
+ Lisp_Object all = Qnil;
+ FOR_EACH_KEY_VALUE (it, Vpackage_registry)
+ if (NILP (Fmemq (it.value, all)))
+ all = Fcons (it.value, all);
+ return all;
}
/* Map FUNCTION over all symbols in PACKAGE. */
@@ -446,8 +457,9 @@ pkg_map_package_symbols (Lisp_Object fn, Lisp_Object
package)
static void
pkg_map_symbols (Lisp_Object function)
{
- FOR_EACH_KEY_VALUE (it_package, Vpackage_registry)
- pkg_map_package_symbols (function, it_package.value);
+ Lisp_Object tail = pkg_list_all_packages ();
+ FOR_EACH_TAIL (tail)
+ pkg_map_package_symbols (function, XCAR (tail));
}
/* Map a C funtion FN over all symbols in all registered packages.
@@ -457,9 +469,10 @@ pkg_map_symbols (Lisp_Object function)
void
pkg_map_symbols_c_fn (void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg)
{
- FOR_EACH_KEY_VALUE (it_package, Vpackage_registry)
- FOR_EACH_KEY_VALUE (it_symbol, PACKAGE_SYMBOLS (it_package.value))
- fn (it_symbol.key, arg);
+ Lisp_Object tail = pkg_list_all_packages ();
+ FOR_EACH_TAIL (tail)
+ FOR_EACH_KEY_VALUE (it, PACKAGE_SYMBOLS (XCAR (tail)))
+ fn (it.key, arg);
}
/* Value is true if obj is a keyword symbol. */
- pkg a5f6912c6d 30/76: Mapatoms differently, (continued)
- pkg a5f6912c6d 30/76: Mapatoms differently, Gerd Moellmann, 2022/10/21
- pkg 2edc30628a 27/76: Use build_pure_c_string, Gerd Moellmann, 2022/10/21
- pkg 85c0eb1682 36/76: Merge remote-tracking branch 'origin/master' into pkg, Gerd Moellmann, 2022/10/21
- pkg 07f0b758ae 62/76: hash_remove_from_table returns bool, Gerd Moellmann, 2022/10/21
- pkg e1a730849e 42/76: Fix printing uninterned symbols, Gerd Moellmann, 2022/10/21
- pkg 1424d2c6b7 61/76: Fix intern-soft, Gerd Moellmann, 2022/10/21
- pkg bdca01dd38 29/76: Workaround for something Stefan missed, Gerd Moellmann, 2022/10/21
- pkg 62582ea927 72/76: Fix completion for new symbol table layout, Gerd Moellmann, 2022/10/21
- pkg a93ec52542 76/76: Work on Lisp interface, Gerd Moellmann, 2022/10/21
- pkg 9ab00f542f 70/76: Introduce PACKAGE_NAMEX, Gerd Moellmann, 2022/10/21
- pkg 51cd0e05d6 71/76: De-duplicate packages for mapatoms,
Gerd Moellmann <=
- pkg 9a263a0782 57/76: Move more package stuff to Lisp, Gerd Moellmann, 2022/10/21
- pkg d374cb202a 43/76: Revert "Use make-package instead of make-vector", Gerd Moellmann, 2022/10/21
- pkg 77543a203a 45/76: Revert "Dpn't assume symbol-name of keywords starts with colon", Gerd Moellmann, 2022/10/21
- pkg 0a345a1181 53/76: Make internals of Lisp_Package visible to Lisp, Gerd Moellmann, 2022/10/21
- pkg 13010d7bd0 47/76: Partially revert "Remove obarrays", Gerd Moellmann, 2022/10/21
- pkg 132f070747 58/76: New predefined hash table test for string-equal, Gerd Moellmann, 2022/10/21
- pkg 4f7c171fb4 49/76: Support specifying package size, Gerd Moellmann, 2022/10/21
- pkg 9e3cfff902 51/76: Increase default symbol-table sizes, Gerd Moellmann, 2022/10/21
- pkg c98a69d650 50/76: DEFVAR some variables, Gerd Moellmann, 2022/10/21
- pkg 2030adac1c 38/76: Fake obarrays, Gerd Moellmann, 2022/10/21