The provenance rides on the location, not on the form, because the location is the thing that already travels: Expand.unmarshal stamps the call site onto every node a macro answers with, and that stamp goes on through the AST and the typed IR untouched. Tagging it there means an error raised anywhere downstream can name the macro with no field added to Form, to Ast or to Tast. Outermost wins. The macro the author wrote is the one worth naming, not whatever it expanded into on the way down. The honest limit, since it would otherwise read as a claim: a macro's expansion has no source of its own to point at, so the note lands on the call site along with the error. What it buys is the reader knowing the code being refused is not the code they wrote.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%