Error codes¶
Every user-facing assembler diagnostic carries a stable error code so you can search docs by code, suppress individual rules in tooling, and correlate output across CLI runs.
Anatomy¶
error[E0200]: `my_routime` is not defined in the current scope
--> dym.s:4:11
|
3 | rts
4 | jsr.l my_routime
| ^^^^^^^^^^
5 |
= hint: did you mean `my_routine`?
error[CODE]— severity + stable identifier.--> file:line:column— the failure location.- Source block with
±1context lines and a caret pointing at the offending span. - Optional
= hint:/= note:lines with fix suggestions.
When multiple errors come out of one parse pass they are rendered as separate blocks separated by a blank line.
Categories¶
E0001..E0099— scanner / lexing.E0100..E0199— parser.E0200..E0299— symbol resolution.E0300..E0399— codegen.E0400..E0499— linker / object files.E0500..E0599— I/O / config.
Code catalog¶
Scanner¶
E0001invalid input character — the scanner met a character it doesn't know how to start a token with.E0002unterminated string literal — close the string with the matching quote character.E0003unknown directive keyword —.directivenot in the supported set; see directives.md.
Parser¶
E0100unexpected token — generic structural failure.E0101missing expected token — the parser knew what it wanted next but found something else.E0102invalid expression — the expression couldn't be parsed at the given position.E0103duplicate struct field — each.structfield name must be unique within the block.E0104typed-cast bind requires:=— usename := expr as Tinstead of=.E0105field access requires typed cast —(expr).fieldonly works on a typed cast:(expr as Type).field.E0106unknown directive attribute — the directive doesn't accept the attribute name.E0107pool declares no ranges — every.poolneeds at least onerange LO HI.E0108unknown pool strategy — accepted values:pack,order.E0109include file unreadable — the path resolution failed.
Symbols¶
E0200symbol not defined — the resolver couldn't find this symbol; the error includes a did-you-mean suggestion when a close match exists in scope.E0201external reference outside object mode.E0202expression failed to evaluate — likely a forward reference the resolver couldn't bind.
Codegen¶
E0300node failed during emission — generic codegen failure.E0301unknown struct field type —.structreferences an identifier that isn't a primitive or a previously-declared struct.E0302struct field self-reference — a struct cannot embed itself.E0303struct redefined.E0304typed bind references unknown struct type.E0305typed bind base must evaluate to an address.E0306operand size mismatch.E0307addressing mode not supported by opcode.
Linker¶
E0400duplicate global symbol.E0401unresolved external symbol.E0402relocation out of range.E0403relocation expression failed.
I/O / config¶
E0500file not found.E0501invalid project config.
LSP integration¶
The a816-lsp-server publishes diagnostics with the same code and
appends the hint to the message. Editors that recognise the code
field (VS Code, Helix, Neovim with vim.diagnostic) render it as the
familiar inline chip.
Suppressing noise¶
There is no global suppression knob for E* errors — they signal real
failures, not style issues. Style-style suppression lives on the
fluff side (; noqa: <RULE> for DOC* / S* / N*); see
fluff.md.