- (deftype ,typename () ,type)
- (setf (get ',name 'designator-type) ',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))
+ (setf (gethash ',name *designator-types*) ',alien-type))
+ (declaim (ftype (function (t) (values ,lisp-type &optional)) ,name))
+ (defun ,name (,name)
+ ,@(when doc (list (third doc)))
+ (etypecase ,name
+ ,@conversions)))))