diff --git a/code/alieneval.lisp b/code/alieneval.lisp index b7280f2ff56d7c1ec9fb1a9960e0976c5b426c39..25d6ecec591e76ac5ad2a931a843e3026c1b780b 100644 --- a/code/alieneval.lisp +++ b/code/alieneval.lisp @@ -1212,8 +1212,17 @@ don't know that it is supposed to be used for. I suspect it is a PERQ crock. (size :constant 1) (declare (ignore size)) (if (eq kind :read) - `(sap-ref-sap ,sap ,offset) - `(setf (sap-ref-sap ,sap ,offset) ,value)))) + `(error "Cannot reference pointer aliens") + (let ((n-value (gensym))) + `(setf (sap-ref-sap ,sap ,offset) + (let ((,n-value ,value)) + (etypecase ,n-value + (null (int-sap 0)) + (system-area-pointer ,n-value) + ((or simple-string + simple-bit-vector + (simple-array unsigned-byte (*))) + (%primitive c::vector-sap ,n-value))))))))) ;;;; Enumeration Alien access: