Comment 4 for bug 1909659

The confusion in INVOKE-EMF causes a two-arg call to a reader function to attempt to write the first argument at a slot offset of the second. This is... not ideal.

(defun report-my-unbound-variable (condition stream)
  (format stream "The variable ~S is unbound."
          (my-cell-error-name condition)))

(defclass my-unbound-variable ()
  ((name :reader my-cell-error-name :initarg :name)))

(defmethod print-object ((condition my-unbound-variable) stream)
  (funcall #'report-my-unbound-variable condition stream))

(defclass zzz ()
  ((x :initform 1))
  (:metaclass sb-mop:funcallable-standard-class))

(defun test ()
  (let ((zzz (make-instance 'zzz)))
    (assert (typep (slot-value zzz 'x) '(integer 1)))
    (funcall (lambda () (my-cell-error-name
                         (make-instance 'my-unbound-variable :name 'foo)
                         zzz)))
    (assert (typep (slot-value zzz 'x) '(integer 1)))))