1use {crate::define_compile_errors, std::ops::Range};
2
3define_compile_errors! {
6 InvalidNumber {
8 error = "Invalid number '{number}'",
9 label = "Invalid number",
10 fields = { number: String, span: Range<usize> }
11 },
12 InvalidRegister {
13 error = "Invalid register '{register}'",
14 label = "Invalid register",
15 fields = { register: String, span: Range<usize> }
16 },
17 UnexpectedCharacter {
18 error = "Unexpected character '{character}'",
19 label = "Unexpected character",
20 fields = { character: char, span: Range<usize> }
21 },
22 UnterminatedStringLiteral {
23 error = "Unterminated string literal",
24 label = "Unterminated string literal",
25 fields = { span: Range<usize> }
26 },
27 InvalidGlobalDecl {
29 error = "Invalid global declaration",
30 label = "Expected <identifier> for entry label",
31 fields = { span: Range<usize> }
32 },
33 InvalidExternDecl {
34 error = "Invalid extern declaration",
35 label = "Invalid extern declaration",
36 fields = { span: Range<usize> }
37 },
38 InvalidRodataDecl {
39 error = "Invalid rodata declaration",
40 label = "Invalid rodata declaration",
41 fields = { span: Range<usize> }
42 },
43 InvalidEquDecl {
44 error = "Invalid equ declaration",
45 label = "Invalid equ declaration",
46 fields = { span: Range<usize> }
47 },
48 InvalidDirective {
49 error = "Invalid directive '{directive}'",
50 label = "Invalid directive",
51 fields = { directive: String, span: Range<usize> }
52 },
53 InvalidInstruction {
54 error = "Invalid '{instruction}' instruction",
55 label = "Invalid instruction",
56 fields = { instruction: String, span: Range<usize> }
57 },
58 UnexpectedToken {
59 error = "Unexpected token '{token}'",
60 label = "Unexpected token",
61 fields = { token: String, span: Range<usize> }
62 },
63 UnmatchedParen {
64 error = "Unmatched parenthesis",
65 label = "Unmatched parenthesis",
66 fields = { span: Range<usize> }
67 },
68 ParseError {
69 error = "Parse error: {error}",
70 label = "Parse error",
71 fields = { error: String, span: Range<usize> }
72 },
73 OutOfRangeLiteral {
74 error = "Out of range literal'",
75 label = "Out of range literal",
76 fields = { span: Range<usize> }
77 },
78 InvalidRODataDirective {
79 error = "Invalid rodata directive",
80 label = "Invalid rodata directive",
81 fields = { span: Range<usize> }
82 },
83 UndefinedLabel {
85 error = "Undefined label '{label}'",
86 label = "Undefined label",
87 fields = { label: String, span: Range<usize> }
88 },
89 DuplicateLabel {
90 error = "Duplicate label '{label}'",
91 label = "Label redefined",
92 fields = { label: String, span: Range<usize>, original_span: Range<usize> }
93 },
94 BytecodeError {
95 error = "Bytecode error: {error}",
96 label = "Bytecode error",
97 fields = { error: String, span: Range<usize> }
98 },
99 MissingTextDirective {
100 error = "Missing text directive",
101 label = "Missing text directive",
102 fields = { span: Range<usize> }
103 },
104}