(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.
13 lines
462 B
Plaintext
13 lines
462 B
Plaintext
;;;; Too few arguments for the macro's parameter list, refused at the call.
|
|
;;;;
|
|
;;;; Nothing here is a run-time claim and nothing here expands: check_call
|
|
;;;; counts the call against the list before do-grid is ever run, so the
|
|
;;;; location is the line below rather than a node of an expansion stamped
|
|
;;;; with Loc.from_macro.
|
|
(defmacro do-grid [[r rows c cols] & body]
|
|
`(dotimes [~r ~rows] (dotimes [~c ~cols] ~@body)))
|
|
|
|
(defn main [] i32
|
|
(do-grid)
|
|
0)
|