X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Fdesignator.lisp;h=e3c0df7524cde548639094a4d5ee156528f9ca4a;hb=607f3e366b0e5b5fb4606202a6a5f625c05c3838;hp=5094a94c589a4375247a9ee859c1b4e762f52ec1;hpb=e411bd41397e1df2423838a4f9c2fdaa27727e93;p=sbcl.git diff --git a/contrib/sb-posix/designator.lisp b/contrib/sb-posix/designator.lisp index 5094a94..e3c0df7 100644 --- a/contrib/sb-posix/designator.lisp +++ b/contrib/sb-posix/designator.lisp @@ -1,27 +1,18 @@ -(in-package :sb-posix-internal) +(in-package :sb-posix) +(defvar *designator-types* (make-hash-table :test #'equal)) + (defmacro define-designator (name result &body conversions) (let ((type `(quote (or ,@(mapcar #'car conversions)))) - (typename (intern (format nil "~A-~A" - (symbol-name name) - (symbol-name :designator)) - #.*package*))) + (typename (intern (format nil "~A-~A" + (symbol-name name) + (symbol-name :designator)) + #.*package*))) `(progn (eval-when (:compile-toplevel :load-toplevel :execute) - (deftype ,typename () ,type) - (setf (get ',name 'designator-type) ',result)) + (deftype ,typename () ,type) + (setf (gethash ',name *designator-types*) ',result)) (defun ,(intern (symbol-name name) :sb-posix) (,name) - (declare (type ,typename ,name)) - (etypecase ,name - ,@conversions))))) - -(define-designator filename c-string - (pathname (namestring (translate-logical-pathname filename))) - (string filename)) - -(define-designator file-descriptor (integer 32) - (sb-impl::file-stream (sb-impl::fd-stream-fd file-descriptor)) - (fixnum file-descriptor)) + (declare (type ,typename ,name)) + (etypecase ,name + ,@conversions))))) -(define-designator sap-or-nil sb-sys:system-area-pointer - (null (sb-sys:int-sap 0)) - (sb-sys:system-area-pointer sap-or-nil))