0.pre8.57
[sbcl/lichteblau.git] / contrib / sb-posix / designator.lisp
blob2aa33e276db5cd84d8250960fb42337351f54ec5
1 (in-package :sb-posix-internal)
2 (defmacro define-designator (name result &body conversions)
3 (let ((type `(quote (or ,@(mapcar #'car conversions))))
4 (typename (intern (format nil "~A-~A"
5 (symbol-name name)
6 (symbol-name :designator))
7 #.*package*)))
8 `(progn
9 (eval-when (:compile-toplevel :load-toplevel :execute)
10 (deftype ,typename () ,type)
11 (setf (get ',name 'designator-type) ',result))
12 (defun ,(intern (symbol-name name) :sb-posix) (,name)
13 (declare (type ,typename ,name))
14 (etypecase ,name
15 ,@conversions)))))
17 (define-designator filename c-string
18 (pathname (namestring (translate-logical-pathname filename)))
19 (string filename))
21 (define-designator file-descriptor (integer 32)
22 (sb-impl::file-stream (sb-impl::fd-stream-fd file-descriptor))
23 (fixnum file-descriptor))