|
ANSI Common Lisp 5 Data and Control Flow 5.3 Dictionary of Data and Control Flow
5.3.63 get-setf-expansion |
Function |
- Syntax:
-
get-setf-expansion
place &optional environment
vars, vals, store-vars, writer-form, reader-form
- Arguments and Values:
-
place - a place.
environment - an environment object.
vars, vals, store-vars, writer-form, reader-form - a setf expansion.
- Description:
-
Determines
five values constituting the setf expansion for place
in environment; see Section 5.1.1.2 Setf Expansions.
If environment is not supplied or nil,
the environment is the null lexical environment.
- Examples:
-
(get-setf-expansion 'x)
NIL, NIL, (#:G0001), (SETQ X #:G0001), X
;;; This macro is like POP
(defmacro xpop (place &environment env)
(multiple-value-bind (dummies vals new setter getter)
(get-setf-expansion place env)
`(let* (,@(mapcar #'list dummies vals) (,(car new) ,getter))
(if (cdr new) (error "Can't expand this."))
(prog1 (car ,(car new))
(setq ,(car new) (cdr ,(car new)))
,setter))))
(defsetf frob (x) (value)
`(setf (car ,x) ,value)) FROB
;;; The following is an error; an error might be signaled at macro expansion time
(flet ((frob (x) (cdr x))) ;Invalid
(xpop (frob z)))
- See Also:
-
defsetf,
define-setf-expander,
setf
- Notes:
-
Any compound form is a valid place,
since any compound form whose operator f has no setf expander
are expanded into a call to (setf f).
- Allegro CL Implementation Details:
-
None.
|