SLOT-MISSING-VALUESSLOT-UNBOUND or SLOT-MISSING method are returned from SLOT-VALUE, SETF, SLOT-BOUNDP, or SLOT-MAKUNBOUND. However, the language mandates particular values to be returned by SETF and by SLOT-MAKUNBOUND, and mandates that SLOT-VALUE and SLOT-BOUNDP return exactly one value. If methods can change this, efficient compilation becomes very difficult.
This is Symbolics issue #19.
SLOT-UNBOUND or SLOT-MISSING method, as follows:
If the operation was SETF or SLOT-MAKUNBOUND, the values are ignored.
If the operation was SLOT-VALUE or SLOT-BOUNDP, exactly one value is returned; extra values returned by the method are ignored, and if the method returns no values, NIL is returned.
If the operation was SLOT-BOUNDP and the method returns a value other than NIL, SLOT-BOUNDP might return any object other than NIL that it can validly return; only the truth or falsity of the method's value matters.
CLOS implementations already conform to the proposal, since implementing what the document says would be extremely difficult. I have not actually tested any implementations.SLOT-VALUE to return two values, or to force SETF of SLOT-VALUE to return something different from new-value.CLOS will be seriously difficult to implement correctly.CLOS correctly will cause a serious efficiency impact on SLOT-VALUE if this proposal is not adopted, since it will have to be capable of dynamically deciding at run time to return multiple values.