(it is likely that the fault lies in PPRINT-LOGICAL-BLOCK, as
suggested by the suggested implementation of PPRINT-TABULAR)
-342: PPRINT-TABULAR / PPRINT-LOGICAL-BLOCK logical block start position
- The logical block introduced by PPRINT-LOGICAL-BLOCK should not
- include the prefix, so that
- (pprint-tabular *standard-output* '(1 2 3) t nil 2)
- should print
- "(1 2 3)" rather than "(1 2 3)".
-
343: MOP:COMPUTE-DISCRIMINATING-FUNCTION overriding causes error
Even the simplest possible overriding of
COMPUTE-DISCRIMINATING-FUNCTION, suggested in the PCL implementation
;;; DEFINE-SETF-EXPANDER is a lot like DEFMACRO.
(def!macro sb!xc:define-setf-expander (access-fn lambda-list &body body)
#!+sb-doc
- "Syntax like DEFMACRO, but creates a Setf-Method generator. The body
- must be a form that returns the five magical values."
+ "Syntax like DEFMACRO, but creates a setf expander function. The body
+ of the definition must be a form that returns five appropriate values."
(unless (symbolp access-fn)
- (error "DEFINE-SETF-EXPANDER access-function name ~S is not a symbol."
- access-fn))
+ (error "~S access-function name ~S is not a symbol."
+ 'sb!xc:define-setf-expander access-fn))
(with-unique-names (whole environment)
(multiple-value-bind (body local-decs doc)
(parse-defmacro lambda-list whole body access-fn
(sb!xc:define-setf-expander the (type place &environment env)
(declare (type sb!c::lexenv env))
- (multiple-value-bind (dummies vals newval setter getter)
- (get-setf-method place env)
- (values dummies
- vals
- newval
- (subst `(the ,type ,(car newval)) (car newval) setter)
- `(the ,type ,getter))))
+ (multiple-value-bind (temps subforms store-vars setter getter)
+ (sb!xc:get-setf-expansion place env)
+ (values temps subforms store-vars
+ `(multiple-value-bind ,store-vars
+ (the ,type (values ,@store-vars))
+ ,setter)
+ `(the ,type ,getter))))