Expressions ((setf ..) ..) are treated as compound forms, (setf ..) is considered a valid local macro name
If the car of the compound form is not a symbol, then that car must be a lambda expression
— http://clhs.lisp.se/Body/03_abab.htm
Yet, on ECL,
(defun (setf my) (new) new)
;; => (SETF MY)
((setf my) t)
;; => T
and
(flet (((setf my-local) (new) new))
((setf my-local) t))
;; => T
What is yet more alarming, (setf ..)
is considered a valid local macro name:
(macrolet (((setf oops-local) ())))
;; => NIL
At least, it is not considered a valid macro name:
(defmacro (setf oops) ())
;; >> ; Evaluation aborted on #<a SIMPLE-ERROR 0x7fc9a453d100>.
Details:
VERSION "24.5.10"
VCS-ID "UNKNOWN"
OS "Linux"
OS-VERSION "6.1.53-gentoo-r1"
MACHINE-TYPE "x86_64"
FEATURES (:SWANK :SERVE-EVENT :QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2
:ASDF :OS-UNIX :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :WALKER :CDR-6
:GRAY-STREAMS-MODULE :CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7
:ECL-WEAK-HASH :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK :SSE2 :LONG-LONG
:UINT64-T :UINT32-T :UINT16-T :COMPLEX-FLOAT :LONG-FLOAT :UNICODE :DFFI
:CLOS-STREAMS :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS
:BOEHM-GC :ANSI-CL :COMMON-LISP :FLOATING-POINT-EXCEPTIONS
:IEEE-FLOATING-POINT :PACKAGE-LOCAL-NICKNAMES :CDR-14 :PREFIXED-API :FFI
:X86_64 :COMMON :ECL)