Bruno Haible writes:
... SYS::%HANDLER-BIND, and at this point the code walker would barf as well.
Not necessarily. You don't know what the code-walker wants to do (perhaps count function calls, or cross-ref). The code-walker may decide to leave unknown specials alone (most reasonable). However, with the current behaviour, it does not barf on %handler-bind, it barfs on ((error ...) ...) inside it, which is not a correct form, and has no possibility to know where that illegal form comes from. If we had (special-operator-p sys::%handler-bind) -> true in CLISP, then any code-walker would know that it can't continue, which is better than to assume sys::%handler-bind to be a function call when it's clearly not. That's independent on the need to have to add #+clisp(case-of handler-bind) to individual code-walkers, e.g. Iterate. BTW, I also started a thread in cll on this special operator issue Subject: what are allowed special forms? (CLHS clarification) Regards, Jörg.