mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-05 19:31:02 -08:00
OClosure: add support for slot-value
* lisp/emacs-lisp/oclosure.el (oclosure--slot-index) (oclosure--slot-value, oclosure--set-slot-value): New functions. * lisp/emacs-lisp/eieio-core.el (eieio-oset, eieio-oref): Consolidate the type test. Use `oclosure--(set-)slot-value`. (eieio--validate-slot-value, eieio--validate-class-slot-value): Don't presume `class` is an EIEIO class. (eieio--class): Fix bogus `:type` info. (eieio--object-class): Simplify. (eieio--known-slot-name-p): New function. (eieio-oref, eieio-oref-default, eieio-oset-default): Use it. * test/lisp/emacs-lisp/oclosure-tests.el: Require `eieio`. (oclosure-test): Make `name` field mutable. (oclosure-test-slot-value): New test.
This commit is contained in:
parent
6c4a4cc94e
commit
1f4f6b956b
3 changed files with 95 additions and 48 deletions
|
|
@ -22,12 +22,13 @@
|
|||
(require 'ert)
|
||||
(require 'oclosure)
|
||||
(require 'cl-lib)
|
||||
(require 'eieio)
|
||||
|
||||
(oclosure-define (oclosure-test
|
||||
(:copier oclosure-test-copy)
|
||||
(:copier oclosure-test-copy1 (fst)))
|
||||
"Simple OClosure."
|
||||
fst snd name)
|
||||
fst snd (name :mutable t))
|
||||
|
||||
(cl-defmethod oclosure-test-gen ((_x compiled-function)) "#<bytecode>")
|
||||
|
||||
|
|
@ -123,4 +124,20 @@
|
|||
(should (equal (funcall f 5) 15))
|
||||
(should (equal (funcall f2 15) 68))))
|
||||
|
||||
(ert-deftest oclosure-test-slot-value ()
|
||||
(require 'eieio)
|
||||
(let ((ocl (oclosure-lambda
|
||||
(oclosure-test (fst 'fst1) (snd 'snd1) (name 'name1))
|
||||
(x)
|
||||
(list name fst snd x))))
|
||||
(should (equal 'fst1 (slot-value ocl 'fst)))
|
||||
(should (equal 'snd1 (slot-value ocl 'snd)))
|
||||
(should (equal 'name1 (slot-value ocl 'name)))
|
||||
(setf (slot-value ocl 'name) 'new-name)
|
||||
(should (equal 'new-name (slot-value ocl 'name)))
|
||||
(should (equal '(new-name fst1 snd1 arg) (funcall ocl 'arg)))
|
||||
(should-error (setf (slot-value ocl 'fst) 'new-fst) :type 'setting-constant)
|
||||
(should (equal 'fst1 (slot-value ocl 'fst)))
|
||||
))
|
||||
|
||||
;;; oclosure-tests.el ends here.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue