Signal an error. They are same as
error
and errorf
(see Signaling exceptions),
except that the error is signaled at macro-expansion time
(i.e. compile time) rather than run time.
They are useful to tell the user the wrong usage of macro in
the comprehensive way, instead of the cryptic error from the macro
transformer. Because of the purpose, arg … are first
passed to unwrap-syntax
to strip off
the internal syntactic binding informations (see Identifiers).
(define-syntax my-macro
(syntax-rules ()
((_ a b) (foo2 a b))
((_ a b c) (foo3 a b c))
((_ . ?)
(syntax-error "malformed my-macro" (my-macro . ?)))))
(my-macro 1 2 3 4)
⇒ error: "malformed my-macro: (my-macro 1 2 3 4)"