From: Tobias C. Rittweiler [mailto:tcr@freebits.de]
Notice that the relevant line describe a type specifier.
You are right, this would be not the same. I had have not much experience with type specifiers, but read the CLHS. An interesting topic, a meta-level, but only a subset of Common Lisp functions are allowed for defining type specifiers, if I understand it correctly (with the exception of satisfies).
As far as the code is concerned, I think it seems rather like a bug in Lispworks.
Yes, seems it is a bug in LispWorks 4.3.7. A file named "t_macros.fsl" is created while trying to compile it and then it seems like it gets into an endless loop, because the file "macro.fsl" doesn't exists. But the strange thing is, that the endless loop only occurs with this complicated type specifier.
I've found another workaround: It seems like satisfies works. So first I define this function in macros.lisp:
(defun symbol-string-designator-p (object) (and (typep object 'cons) (typep (car object) 'symbol) (typep (cadr object) 'string-designator) (null (caddr object))))
Then I can use
(satisfies symbol-string-designator-p)
later in the macro. This is not nice, but the code is not time critical, because only used in a macro expansion, so should be no problem.
Maybe would be interesting to analyze the real problem, but I guess it is already fixed in LispWorks >= 5, so I'll buy the new version, when I can spend some money for it :-)