flan/test/programs/pkgs/macspin/macspin.flan
Joseph Ferano 69646e534e A macro's parameter list, and one grammar for it
(defmacro do-grid [[r rows c cols] & body] ...) — positional names, a [ ]
pattern wherever an argument is a vector, and & for the tail. The reading of
the list lives in Expand, below both sides that need it: Parse turns it into
the bindings a macro body opens with, and Macro checks a call against the same
reading before expanding it, so arity and shape are refused with the call's own
location rather than with the Loc.from_macro stamp every node of an expansion
carries.

The breaking half: [args] used to bind the whole argument list and now binds
the first argument. The whole list is [& args], and every defmacro in the tree
— prelude, vendor, tests, the elisp fixtures — was migrated to it. One grammar,
not a legacy mode.
2026-09-20 18:18:24 +07:00

9 lines
380 B
Plaintext

;;;; A package macro that expands into a call to itself and does not get
;;;; smaller. Not a ring -- the call is inside a quasiquote, so it is output --
;;;; and so it is bounded rather than refused, with the macro named at the call
;;;; site. The name in that message is the qualified one, because that is what
;;;; the importer wrote.
(defmacro spin [& args]
`(spin ~@args))