summaryrefslogtreecommitdiff
path: root/test/lisp
diff options
context:
space:
mode:
authorakater <nuclearspace@gmail.com>2021-07-12 14:15:54 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2021-07-16 15:40:08 -0400
commit109c27341e35fae778b95e0eb5d4d72927bf4ea8 (patch)
tree02033cc7f712d8f10935aa108455d7b4b6188e77 /test/lisp
parent24a8cc5e707affad345e085b6fe8c778559533f6 (diff)
downloademacs-109c27341e35fae778b95e0eb5d4d72927bf4ea8.tar.gz
emacs-109c27341e35fae778b95e0eb5d4d72927bf4ea8.tar.bz2
emacs-109c27341e35fae778b95e0eb5d4d72927bf4ea8.zip
EIEIO: Prevent excessive evaluation of :initform
* lisp/emacs-lisp/eieio.el (initialize-instance): Do not evaluate initform of a slot when initarg for the slot is provided, according to the following secitons of CLHS: - Object Creation and Initialization - Initialization Arguments - Defaulting of Initialization Arguments - Rules for Initialization Arguments * test/lisp/emacs-lisp/eieio-etests/eieio-tests.el: Add corresponding tests Fix a typo
Diffstat (limited to 'test/lisp')
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-tests.el16
1 files changed, 15 insertions, 1 deletions
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index 11ffc115f7e..3ec42343443 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
@@ -574,7 +574,21 @@ METHOD is the method that was attempting to be called."
(setf (get-slot-3 eitest-t1) 'setf-emu)
(should (eq (get-slot-3 eitest-t1) 'setf-emu))
;; Roll back
- (setf (get-slot-3 eitest-t1) 'emu))
+ (setf (get-slot-3 eitest-t1) 'emu)
+ (defvar eieio-tests-initform-was-evaluated)
+ (defclass eieio-tests-initform-not-evaluated-when-initarg-is-present ()
+ ((slot-with-initarg-and-initform
+ :initarg :slot-with-initarg-and-initform
+ :initform (setf eieio-tests-initform-was-evaluated t))))
+ (setq eieio-tests-initform-was-evaluated nil)
+ (make-instance
+ 'eieio-tests-initform-not-evaluated-when-initarg-is-present)
+ (should eieio-tests-initform-was-evaluated)
+ (setq eieio-tests-initform-was-evaluated nil)
+ (make-instance
+ 'eieio-tests-initform-not-evaluated-when-initarg-is-present
+ :slot-with-initarg-and-initform t)
+ (should-not eieio-tests-initform-was-evaluated))
(defvar eitest-t2 nil)
(ert-deftest eieio-test-26-default-inheritance ()