]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve check for binding etc *package*
authorGerd Möllmann <gerd@gnu.org>
Fri, 28 Oct 2022 13:38:36 +0000 (15:38 +0200)
committerGerd Möllmann <gerd@gnu.org>
Fri, 28 Oct 2022 13:38:36 +0000 (15:38 +0200)
* src/pkg.c (Fwatch_earmuffs_package): Check the makunbound case specially.
(syms_of_pkg): Remove duplicate code.
* test/src/pkg-tests.el (pkg-tests-*package*): Add tests.

src/pkg.c
test/src/pkg-tests.el

index 21feb12dea0fcbee65adfb4da46443ebb7369421..7f78c61cf322bc4380d9b6f43dce26f3482983fa 100644 (file)
--- a/src/pkg.c
+++ b/src/pkg.c
@@ -27,6 +27,7 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include "lisp.h"
+#include "buffer.h"
 #include "character.h"
 
 /***********************************************************************
@@ -102,7 +103,8 @@ h_next (struct h_iter *it)
 /* Sometimes useful for setting a breakpoint, after inserting it
    somewhere in the code.  */
 
-void pkg_break (void)
+void
+pkg_break (void)
 {
 }
 
@@ -891,9 +893,15 @@ DEFUN ("watch-*package*", Fwatch_earmuffs_package, Swatch_earmuffs_package,
   (Lisp_Object symbol, Lisp_Object newval, Lisp_Object operation,
    Lisp_Object where)
 {
-  if (!PACKAGEP (newval))
-    error ("%s must be bound or set to a package object",
-          SDATA (SYMBOL_NAME (symbol)));
+  if (EQ (operation, Qmakunbound))
+    {
+      if (!BUFFERP (where))
+       error ("Cannot makunbound %s", SDATA (SYMBOL_NAME (symbol)));
+    }
+  else if (!PACKAGEP (newval))
+    error ("%s must alwasy be bound to a package object (operation %s)",
+          SDATA (SYMBOL_NAME (symbol)),
+          SDATA (SYMBOL_NAME (operation)));
   return Qnil;
 }
 
@@ -1003,8 +1011,6 @@ syms_of_pkg (void)
                     doc: /* */);
   Fmake_variable_buffer_local (Qpackage_prefixes);
 
-  Fmake_variable_buffer_local (Qpackage_prefixes);
-
   Fprovide (Qsymbol_packages, Qnil);
 }
 
index 819a74dae65cd336da8b9e49be3cee441c61b17e..df44859fa425bb7406fa80a634ffebed7222bcb8 100644 (file)
   (should (eq (let ((*package* (find-package "emacs"))) 'good) 'good))
   (should-error (let ((*package* :emacs)) nil))
   (should-error (let ((*package* 1))))
-  (should-error (setq *package* :keyword)))
+  (should-error (setq *package* :keyword))
+  (should-error (makunbound *package*))
+  (with-temp-buffer
+    (in-package* :emacs-user)
+    (kill-all-local-variables)
+    (should (eq *package* (find-package :emacs)))))
 
 (ert-deftest pkg-tests-standard-packages ()
   (should (packagep (find-package "emacs")))