Excuse me, I have forgotten about the `diff`. The same as the patch.
Thanks! -- WBR, Yaroslav Kavenchuk.
--- src/cffi-sbcl.lisp Tue Sep 5 13:15:32 2006 +++ src/cffi-sbcl.lisp Wed Sep 13 05:37:14 2006 @@ -74,38 +74,52 @@ ;;; Symbol case. +(declaim (inline canonicalize-symbol-name-case)) (defun canonicalize-symbol-name-case (name) (declare (string name)) (string-upcase name)) ;;;# Basic Pointer Operations +(declaim (inline pointerp)) (defun pointerp (ptr) "Return true if PTR is a foreign pointer." (sb-sys:system-area-pointer-p ptr)) +(declaim (inline pointer-eq)) (defun pointer-eq (ptr1 ptr2) "Return true if PTR1 and PTR2 point to the same address." + (declare (type system-area-pointer ptr1 ptr2)) (sb-sys:sap= ptr1 ptr2)) +(declaim (inline null-pointer)) (defun null-pointer () "Construct and return a null pointer." (sb-sys:int-sap 0)) +(declaim (inline null-pointer-p)) (defun null-pointer-p (ptr) "Return true if PTR is a null pointer." + (declare (type system-area-pointer ptr)) (zerop (sb-sys:sap-int ptr))) +(declaim (inline inc-pointer)) (defun inc-pointer (ptr offset) "Return a pointer pointing OFFSET bytes past PTR." + (declare (type system-area-pointer ptr) + (type integer offset)) (sb-sys:sap+ ptr offset)) +(declaim (inline make-pointer)) (defun make-pointer (address) "Return a pointer pointing to ADDRESS." + (declare (type (unsigned-byte 32) address)) (sb-sys:int-sap address)) +(declaim (inline pointer-address)) (defun pointer-address (ptr) "Return the address pointed to by PTR." + (declare (type system-area-pointer ptr)) (sb-sys:sap-int ptr)) ;;;# Allocation @@ -115,12 +129,16 @@ ;;; FOREIGN-ALLOC and FOREIGN-FREE in UNWIND-PROTECT for the common usage ;;; when the memory has dynamic extent. +(declaim (inline %foreign-alloc)) (defun %foreign-alloc (size) "Allocate SIZE bytes on the heap and return a pointer." + (declare (type (unsigned-byte 32) size)) (alien-sap (make-alien (unsigned 8) size))) +(declaim (inline foreign-free)) (defun foreign-free (ptr) "Free a PTR allocated by FOREIGN-ALLOC." + (declare (type system-area-pointer ptr)) (free-alien (sap-alien ptr (* (unsigned 8))))) (defmacro with-foreign-pointer ((var size &optional size-var) &body body) @@ -150,15 +168,18 @@ ;;; should be defined to perform a copy-in/copy-out if the Lisp ;;; implementation can't do this. +(declaim (inline make-shareable-byte-vector)) (defun make-shareable-byte-vector (size) "Create a Lisp vector of SIZE bytes can passed to WITH-POINTER-TO-VECTOR-DATA." + ; (declare (type sb-int:index size)) (make-array size :element-type '(unsigned-byte 8))) (defmacro with-pointer-to-vector-data ((ptr-var vector) &body body) "Bind PTR-VAR to a foreign pointer to the data in VECTOR." (let ((vector-var (gensym "VECTOR"))) `(let ((,vector-var ,vector)) + (declare (type (simple-unboxed-array (*)) ,vector-var)) (sb-sys:with-pinned-objects (,vector-var) (let ((,ptr-var (sb-sys:vector-sap ,vector-var))) ,@body))))) @@ -299,6 +320,7 @@ ;;;# Loading and Closing Foreign Libraries +(declaim (inline %load-foreign-library)) (defun %load-foreign-library (name) "Load the foreign library NAME." (load-shared-object name)) @@ -319,6 +341,7 @@ ;;;# Finalizers +(declaim (inline finalize)) (defun finalize (object function) "Pushes a new FUNCTION to the OBJECT's list of finalizers. FUNCTION should take no arguments. Returns OBJECT. @@ -329,6 +352,7 @@ accessible when FUNCTION is invoked." (sb-ext:finalize object function)) +(declaim (inline cancel-finalization)) (defun cancel-finalization (object) "Cancels all of OBJECT's finalizers, if any." (sb-ext:cancel-finalization object))
_______________________________________________ cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel