* lisp/emacs-lisp/gv.el (gv-ref, gv-deref): New function and macro.
This commit is contained in:
parent
c66f21eaf1
commit
d14bb752ea
2 changed files with 22 additions and 0 deletions
|
@ -433,6 +433,24 @@ The return value is the last VAL in the list.
|
|||
`(logior (logand ,v ,mask)
|
||||
(logand ,getter (lognot ,mask))))))))))
|
||||
|
||||
;;; References
|
||||
|
||||
;;;###autoload
|
||||
(defmacro gv-ref (place)
|
||||
"Return a reference to PLACE.
|
||||
This is like the `&' operator of the C language."
|
||||
(gv-letplace (getter setter) place
|
||||
`(cons (lambda () ,getter)
|
||||
(lambda (gv--val) ,(funcall setter 'gv--val)))))
|
||||
|
||||
;;;###autoload
|
||||
(defsubst gv-deref (ref)
|
||||
"Dereference REF, returning the referenced value.
|
||||
This is like the `*' operator of the C language.
|
||||
REF must have been previously obtained with `gv-ref'."
|
||||
(declare (gv-setter (lambda (v) `(funcall (cdr ,ref) ,v))))
|
||||
(funcall (car ref)))
|
||||
|
||||
;;; Vaguely related definitions that should be moved elsewhere.
|
||||
|
||||
;; (defun alist-get (key alist)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue