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