>From 5b6eedfee3ac95313d29dca57f56461322dd9b13 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Wed, 3 Jun 2020 14:18:19 +0100 Subject: [PATCH] Fix some EIEIO obsoletions The deprecation of oset and oset-default was discussed in the following threads: https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00630.html https://lists.gnu.org/archive/html/emacs-devel/2020-05/msg00674.html * doc/misc/ede.texi (ede-generic-project): Tidy up example. * doc/misc/eieio.texi (Accessing Slots): Document oref, oref-default, and slot-value as generalized variables, and set-slot-value as obsolete. Consistently document getters before setters. (Predicates): Mention cl-print-object in place of the obsolete object-print. (Introspection): Document eieio-class-slots in place of the obsolete object-slots. * lisp/emacs-lisp/eieio.el: Un-deprecate oset and oset-default. Make oref-default setf-able. * etc/NEWS: Announce this change. * test/lisp/emacs-lisp/eieio-tests/eieio-tests.el: Use lexical-binding. (eieio-test-13-init-methods): Simplify. (eieio-test-33-instance-tracker): Declare IT-list as special. --- doc/misc/ede.texi | 10 ++-- doc/misc/eieio.texi | 49 +++++++++++++------ etc/NEWS | 7 ++- lisp/emacs-lisp/eieio.el | 7 ++- .../emacs-lisp/eieio-tests/eieio-tests.el | 5 +- 5 files changed, 49 insertions(+), 29 deletions(-) diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index 584b0d7ee5..412176986c 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -955,18 +955,16 @@ ede-generic-project ;;; MAKEFILE (defclass ede-generic-makefile-project (ede-generic-project) - ((buildfile :initform "Makefile") - ) + ((buildfile :initform "Makefile")) "Generic Project for makefiles.") (defmethod ede-generic-setup-configuration ((proj ede-generic-makefile-project) config) - "Setup a configuration for Make." + "Set up a configuration for Make." (oset config build-command "make -k") - (oset config debug-command "gdb ") - ) + (oset config debug-command "gdb ")) (ede-generic-new-autoloader "generic-makefile" "Make" - "Makefile" 'ede-generic-makefile-project) + "Makefile" 'ede-generic-makefile-project) @end example This example project will detect any directory with the file diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index 3943c544c7..06093f7263 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -698,6 +698,27 @@ Accessing Slots referencing vectors (@pxref{Vectors,,,elisp,GNU Emacs Lisp Reference Manual}). +@defmac oref obj slot +@anchor{oref} +This macro retrieves the value stored in @var{obj} in the slot named +by @var{slot}. @var{slot} is the name of the slot when created by +@dfn{defclass}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + +@defmac oref-default class slot +@anchor{oref-default} +This macro returns the value of the class-allocated @var{slot} from +@var{class}. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. +@end defmac + @defmac oset object slot value This macro sets the value behind @var{slot} to @var{value} in @var{object}. It returns @var{value}. @@ -716,17 +737,6 @@ Accessing Slots @end example @end defmac -@defmac oref obj slot -@anchor{oref} -Retrieve the value stored in @var{obj} in the slot named by @var{slot}. -Slot is the name of the slot when created by @dfn{defclass}. -@end defmac - -@defmac oref-default class slot -@anchor{oref-default} -Get the value of the class-allocated @var{slot} from @var{class}. -@end defmac - The following accessors are defined by CLOS to reference or modify slot values, and use the previously mentioned set/ref routines. @@ -734,14 +744,21 @@ Accessing Slots @anchor{slot-value} This function retrieves the value of @var{slot} from @var{object}. Unlike @code{oref}, the symbol for @var{slot} must be quoted. + +This is a generalized variable that can be used with @code{setf} to +modify the value stored in @var{slot}. @xref{Generalized +Variables,,,elisp,GNU Emacs Lisp Reference Manual}. @end defun @defun set-slot-value object slot value @anchor{set-slot-value} -This is not a CLOS function, but is the setter for @code{slot-value} -used by the @code{setf} macro. This -function sets the value of @var{slot} from @var{object}. Unlike +This function sets the value of @var{slot} from @var{object}. Unlike @code{oset}, the symbol for @var{slot} must be quoted. + +This is not a CLOS function, but is the obsolete setter for +@code{slot-value} used by the @code{setf} macro. It is therefore +recommended to use @code{(setf (slot-value @var{object} @var{slot}) +@var{value})} instead. @end defun @defun slot-makeunbound object slot @@ -1061,7 +1078,7 @@ Predicates Return a string of the form @samp{#} for @var{obj}. This should look like Lisp symbols from other parts of Emacs such as buffers and processes, and is shorter and cleaner than printing the -object's record. It is more useful to use @code{object-print} to get +object's record. It is more useful to use @code{cl-print-object} to get and object's print form, as this allows the object to add extra display information into the symbol. @end defun @@ -1217,7 +1234,7 @@ Introspection some functions have been provided. None of these functions are a part of CLOS. -@defun object-slots obj +@defun eieio-class-slots obj Return the list of public slots for @var{obj}. @end defun diff --git a/etc/NEWS b/etc/NEWS index ed4722b27f..27e511047e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -112,7 +112,12 @@ setting the variable 'auto-save-visited-mode' buffer-locally to nil. ** New bindings in occur-mode, 'next-error-no-select' bound to 'n' and 'previous-error-no-select' bound to 'p'. -** EIEIO: 'oset' and 'oset-default' are declared obsolete. +** EIEIO + ++++ +*** The macro 'oref-default' can now be used with 'setf'. +It is now defined as a generalized variable that can be used with +'setf' to modify the value stored in a given class slot. ** New minor mode 'cl-font-lock-built-in-mode' for `lisp-mode'. The mode provides refined highlighting of built-in functions, types, diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el index ee5dd2cccd..73573a80eb 100644 --- a/lisp/emacs-lisp/eieio.el +++ b/lisp/emacs-lisp/eieio.el @@ -513,8 +513,7 @@ oset "Set the value in OBJ for slot SLOT to VALUE. SLOT is the slot name as specified in `defclass' or the tag created with in the :initarg slot. VALUE can be any Lisp object." - (declare (obsolete "use (setf (oref ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset ,obj (quote ,slot) ,value)) (defmacro oset-default (class slot value) @@ -522,8 +521,7 @@ oset-default The default value is usually set with the :initform tag during class creation. This allows users to change the default behavior of classes after they are created." - (declare (obsolete "use (setf (oref-default ..) ..) instead" "28.1") - (debug (form symbolp form))) + (declare (debug (form symbolp form))) `(eieio-oset-default ,class (quote ,slot) ,value)) ;;; CLOS queries into classes and slots @@ -654,6 +652,7 @@ object-remove-from-list ;; common code between oref and oset, so as to reduce the redundant work done ;; in (push foo (oref bar baz)), like we do for the `nth' expander? (gv-define-simple-setter eieio-oref eieio-oset) +(gv-define-simple-setter eieio-oref-default eieio-oset-default) ;;; diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el index 34c20b2003..21adc91e55 100644 --- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el +++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el @@ -1,4 +1,4 @@ -;;; eieio-tests.el -- eieio tests routines +;;; eieio-tests.el -- eieio test routines -*- lexical-binding: t -*- ;; Copyright (C) 1999-2003, 2005-2010, 2012-2020 Free Software ;; Foundation, Inc. @@ -356,7 +356,7 @@ eieio-test-13-init-methods (oset a test-tag 1)) (let ((ca (class-a))) - (should-not (/= (oref ca test-tag) 2)))) + (should (= (oref ca test-tag) 2)))) ;;; Perform slot testing @@ -852,6 +852,7 @@ IT "Instance Tracker test object.") (ert-deftest eieio-test-33-instance-tracker () + (defvar IT-list) (let (IT-list IT1) (should (setq IT1 (IT))) ;; The instance tracker must find this -- 2.26.2