(in-package "SB!IMPL")
-(file-comment
- "$Header$")
-
;;; The inverse for a generalized-variable reference function is stored in
;;; one of two ways:
;;;
(declaim (ftype (function (t &optional (or null sb!c::lexenv))) sb!xc:get-setf-expansion))
(defun sb!xc:get-setf-expansion (form &optional environment)
#!+sb-doc
- "Returns five values needed by the SETF machinery: a list of temporary
+ "Return five values needed by the SETF machinery: a list of temporary
variables, a list of values with which to fill them, a list of temporaries
for the new values, the setting function, and the accessing function."
(let (temp)
(let ((name (car form)))
(dolist (x (sb!c::lexenv-functions environment))
(when (and (eq (car x) name)
- (not (sb!c::defined-function-p (cdr x))))
+ (not (sb!c::defined-fun-p (cdr x))))
(return t)))))
(expand-or-get-setf-inverse form environment))
((setq temp (info :setf :inverse (car form)))
;; for macroexpansion in general. -- WHN 19991128
(funcall temp
form
- ;; As near as I can tell from the ANSI spec, macroexpanders
- ;; have a right to expect an actual lexical environment,
- ;; not just a NIL which is to be interpreted as a null
- ;; lexical environment. -- WHN 19991128
- (or environment (make-null-lexenv))))
+ ;; As near as I can tell from the ANSI spec,
+ ;; macroexpanders have a right to expect an actual
+ ;; lexical environment, not just a NIL which is to
+ ;; be interpreted as a null lexical environment.
+ ;; -- WHN 19991128
+ (coerce-to-lexenv environment)))
(t
(expand-or-get-setf-inverse form environment)))))
\f
;;;; SETF itself
-;;; Except for atoms, we always call GET-SETF-EXPANSION, since it has some
-;;; non-trivial semantics. But when there is a setf inverse, and G-S-E uses
-;;; it, then we return a call to the inverse, rather than returning a hairy let
-;;; form. This is probably important mainly as a convenience in allowing the
-;;; use of SETF inverses without the full interpreter.
+;;; Except for atoms, we always call GET-SETF-EXPANSION, since it has
+;;; some non-trivial semantics. But when there is a setf inverse, and
+;;; G-S-E uses it, then we return a call to the inverse, rather than
+;;; returning a hairy LET form. This is probably important mainly as a
+;;; convenience in allowing the use of SETF inverses without the full
+;;; interpreter.
(defmacro-mundanely setf (&rest args &environment env)
#!+sb-doc
"Takes pairs of arguments like SETQ. The first is a place and the second
((eq arg '&rest)
(if (symbolp (cadr ll))
(setq rest-arg (cadr ll))
- (error "Non-symbol &REST arg in definition of ~S." name))
+ (error "Non-symbol &REST argument in definition of ~S." name))
(if (null (cddr ll))
(return nil)
- (error "Illegal stuff after &REST arg.")))
+ (error "Illegal stuff after &REST argument.")))
((memq arg '(&key &allow-other-keys &aux))
(error "~S not allowed in DEFINE-MODIFY-MACRO lambda list." arg))
((symbolp arg)
;;;; DEFSETF
(eval-when (#-sb-xc :compile-toplevel :load-toplevel :execute)
- ;;; Assign setf macro information for NAME, making all appropriate checks.
+ ;;; Assign SETF macro information for NAME, making all appropriate checks.
(defun assign-setf-macro (name expander inverse doc)
(cond ((gethash name sb!c:*setf-assumed-fboundp*)
(warn
((not (fboundp `(setf ,name)))
;; All is well, we don't need any warnings.
(values))
- ((info :function :accessor-for name)
- (warn "defining SETF macro for DEFSTRUCT slot ~
- accessor; redefining as a normal function: ~S"
- name)
- (sb!c::proclaim-as-function-name name))
((not (eq (symbol-package name) (symbol-package 'aref)))
(style-warn "defining setf macro for ~S when ~S is fbound"
name `(setf ,name))))
(error "SETF of APPLY is only defined for function args like #'SYMBOL."))
(let ((function (second functionoid))
(new-var (gensym))
- (vars (mapcar #'(lambda (x)
- (declare (ignore x))
- (gensym))
- args)))
+ (vars (make-gensym-list (length args))))
(values vars args (list new-var)
`(apply #'(setf ,function) ,new-var ,@vars)
`(apply #',function ,@vars))))
(sb!xc:define-setf-expander ldb (bytespec place &environment env)
#!+sb-doc
"The first argument is a byte specifier. The second is any place form
- acceptable to SETF. Replaces the specified byte of the number in this
+ acceptable to SETF. Replace the specified byte of the number in this
place with bits from the low-order end of the new value."
(declare (type sb!c::lexenv env))
(multiple-value-bind (dummies vals newval setter getter)