[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pkg 2030adac1c 38/76: Fake obarrays
From: |
Gerd Moellmann |
Subject: |
pkg 2030adac1c 38/76: Fake obarrays |
Date: |
Fri, 21 Oct 2022 00:16:12 -0400 (EDT) |
branch: pkg
commit 2030adac1cb299a6dd7e57d4854f5c3c8f70d20b
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>
Fake obarrays
---
src/pkg.c | 115 ++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 74 insertions(+), 41 deletions(-)
diff --git a/src/pkg.c b/src/pkg.c
index 53be9496bf..3d0bb01672 100644
--- a/src/pkg.c
+++ b/src/pkg.c
@@ -630,11 +630,65 @@ void pkg_break (void)
{
}
-
+
+static void
+pkg_map_package_symbols (Lisp_Object fn, Lisp_Object package)
+{
+ package = check_package (package);
+ FOR_EACH_KEY_VALUE (it_symbol, PACKAGE_SYMBOLS (package))
+ call1 (fn, it_symbol.value);
+
+}
+
+/* Map FUNCTION over all symbols in 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);
+}
+
+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.value, arg);
+}
+
/***********************************************************************
- Old Emacs intern stuff
+ Old Emacs intern stuff
***********************************************************************/
+/* The idea begind this is as follows:
+
+ We want to het rid of Lisp_Symbol::next. But legcaly code may
+ still contain code for intended for obarrays. These are the
+ possibilities:
+
+ 1. The code uses the obarray variable. In this case, he doesn't
+ get a vector, but the Emacs package.
+
+ 2. The code makes an obarray with obarray-make, in which case he
+ got a package.
+
+ 3. The code uses make-vector, in which case we make a package for
+ him. */
+
+static Lisp_Object
+fake_me_an_obarray (Lisp_Object vector)
+{
+ eassert (VECTORP (vector));
+ Lisp_Object package = Faref (vector, make_fixnum (0));
+ if (!PACKAGEP (package))
+ {
+ package = make_package (build_string ("fake obarray"));
+ Faset (vector, make_fixnum (0), package);
+ }
+ return package;
+}
+
/* Implements Emacs' old Fintern function. */
Lisp_Object
@@ -652,10 +706,8 @@ pkg_emacs_intern (Lisp_Object name, Lisp_Object package)
eassert (SREF (name, 0) != ':');
- /* PKG-FIXME: This is presumable an obarray, and we are intending to
- intern into the default pacakge. */
if (VECTORP (package))
- package = Vemacs_package;
+ package = fake_me_an_obarray (package);
package = package_or_default (package);
return pkg_intern_symbol (name, package);
@@ -679,7 +731,10 @@ pkg_emacs_intern_soft (Lisp_Object name, Lisp_Object
package)
package = Vkeyword_package;
}
+ if (VECTORP (package))
+ package = fake_me_an_obarray (package);
package = package_or_default (package);
+
Lisp_Object found = lookup_symbol (name, package);
if (!EQ (found, Qunbound))
{
@@ -696,10 +751,24 @@ pkg_emacs_intern_soft (Lisp_Object name, Lisp_Object
package)
Lisp_Object
pkg_emacs_unintern (Lisp_Object name, Lisp_Object package)
{
+ if (VECTORP (package))
+ package = fake_me_an_obarray (package);
package = package_or_default (package);
return pkg_unintern_symbol (name, package);
}
+Lisp_Object
+pkg_emacs_mapatoms (Lisp_Object function, Lisp_Object package)
+{
+ if (VECTORP (package))
+ package = fake_me_an_obarray (package);
+ if (NILP (package))
+ pkg_map_symbols (function);
+ else
+ pkg_map_package_symbols (function, package);
+ return Qnil;
+}
+
/***********************************************************************
Reader
@@ -765,42 +834,6 @@ pkg_keywordp (Lisp_Object obj)
return EQ (SYMBOL_PACKAGE (obj), Vkeyword_package);
}
-static void
-pkg_map_package_symbols (Lisp_Object fn, Lisp_Object package)
-{
- package = check_package (package);
- FOR_EACH_KEY_VALUE (it_symbol, PACKAGE_SYMBOLS (package))
- call1 (fn, it_symbol.value);
-
-}
-
-/* Map FUNCTION over all symbols in 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);
-}
-
-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.value, arg);
-}
-
-Lisp_Object
-pkg_emacs_mapatoms (Lisp_Object function, Lisp_Object package)
-{
- if (NILP (package))
- pkg_map_symbols (function);
- else
- pkg_map_package_symbols (function, package);
- return Qnil;
-}
-
/***********************************************************************
Lisp functions
- pkg 51cd0e05d6 71/76: De-duplicate packages for mapatoms, (continued)
- pkg 51cd0e05d6 71/76: De-duplicate packages for mapatoms, Gerd Moellmann, 2022/10/21
- 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 <=
- pkg 6b0304f2dd 67/76: Print package prefixes right, Gerd Moellmann, 2022/10/21
- pkg b6489ecb72 46/76: More scribbling, Gerd Moellmann, 2022/10/21
- pkg 6a8c172927 44/76: Add cö-symbol-name, Gerd Moellmann, 2022/10/21
- pkg e9b97a1f7d 48/76: Revert some unimportant changes, Gerd Moellmann, 2022/10/21
- pkg c4922c4f08 55/76: Make faces work with keywords not having : in symbol names, Gerd Moellmann, 2022/10/21
- pkg 8a59cc12da 54/76: Add amcros for keyword symbols, Gerd Moellmann, 2022/10/21
- pkg d7c793cbbf 17/76: Don't register packages in make-package, Gerd Moellmann, 2022/10/21
- pkg fc936470cd 56/76: Move make-package to Lisp, Gerd Moellmann, 2022/10/21
- pkg 8ca1c93b67 52/76: Work on defpackage, Gerd Moellmann, 2022/10/21