]> git.eshelyaron.com Git - emacs.git/commitdiff
Error when trying to make nil or t obsolete
authorStefan Kangas <stefankangas@gmail.com>
Wed, 6 Sep 2023 09:21:39 +0000 (11:21 +0200)
committerStefan Kangas <stefankangas@gmail.com>
Thu, 7 Sep 2023 23:01:16 +0000 (01:01 +0200)
* lisp/emacs-lisp/byte-run.el (make-obsolete, make-obsolete-variable):
Signal error if the symbol to make obsolete is nil or t.  (Bug#62248)
(byte-run--constant-obsolete-warning): New function.
* test/lisp/emacs-lisp/byte-run-tests.el: New file.

lisp/emacs-lisp/byte-run.el
test/lisp/emacs-lisp/byte-run-tests.el [new file with mode: 0644]

index a377ec395e16b25ff3bf6509996c75f72a7bae30..3e4e4d12cc829b0d3898187a0d700bb3d72260fc 100644 (file)
@@ -494,6 +494,11 @@ convention was modified."
 Return t if there isn't any."
   (gethash function advertised-signature-table t))
 
+(defun byte-run--constant-obsolete-warning (obsolete-name)
+  (if (memq obsolete-name '(nil t))
+      (error "Can't make `%s' obsolete; did you forget a quote mark?"
+             obsolete-name)))
+
 (defun make-obsolete (obsolete-name current-name when)
   "Make the byte-compiler warn that function OBSOLETE-NAME is obsolete.
 OBSOLETE-NAME should be a function name or macro name (a symbol).
@@ -503,6 +508,7 @@ If CURRENT-NAME is a string, that is the `use instead' message
 \(it should end with a period, and not start with a capital).
 WHEN should be a string indicating when the function
 was first made obsolete, for example a date or a release number."
+  (byte-run--constant-obsolete-warning obsolete-name)
   (put obsolete-name 'byte-obsolete-info
        ;; The second entry used to hold the `byte-compile' handler, but
        ;; is not used any more nowadays.
@@ -539,6 +545,7 @@ WHEN should be a string indicating when the variable
 was first made obsolete, for example a date or a release number.
 ACCESS-TYPE if non-nil should specify the kind of access that will trigger
   obsolescence warnings; it can be either `get' or `set'."
+  (byte-run--constant-obsolete-warning obsolete-name)
   (put obsolete-name 'byte-obsolete-variable
        (purecopy (list current-name access-type when)))
   obsolete-name)
diff --git a/test/lisp/emacs-lisp/byte-run-tests.el b/test/lisp/emacs-lisp/byte-run-tests.el
new file mode 100644 (file)
index 0000000..59ce24a
--- /dev/null
@@ -0,0 +1,32 @@
+;;; byte-run-tests.el --- Tests for byte-run.el  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2023 Free Software Foundation, Inc.
+
+;; 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/>.
+
+;;; Code:
+
+(require 'ert)
+
+(ert-deftest make-obsolete ()
+  (should-error (make-obsolete nil 'foo "30.1"))
+  (should-error (make-obsolete t 'foo "30.1") ))
+
+(ert-deftest make-obsolete-variable ()
+  (should-error (make-obsolete-variable nil 'foo "30.1"))
+  (should-error (make-obsolete-variable t 'foo "30.1")))
+
+;;; byte-run-tests.el ends here