• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef PANDA_ASSEMBLER_ERROR_H
17 #define PANDA_ASSEMBLER_ERROR_H
18 
19 #include <string>
20 
21 namespace ark::pandasm {
22 
23 // NOLINTBEGIN(misc-non-private-member-variables-in-classes)
24 struct Error {
25     enum class ErrorClass { WARNING = 0, ERROR };
26     enum class ErrorType {
27         ERR_NONE = 0,
28 
29         // Lexer
30         ERR_STRING_MISSING_TERMINATING_CHARACTER,
31 
32         // Parser
33         ERR_BAD_LABEL,
34         ERR_BAD_LABEL_EXT,
35         ERR_BAD_NAME_ID,
36         ERR_BAD_NAME_REG,
37         ERR_BAD_INTEGER_NAME,
38         ERR_BAD_INTEGER_WIDTH,
39         ERR_BAD_FLOAT_NAME,
40         ERR_BAD_FLOAT_WIDTH,
41         ERR_BAD_NUMBER_OPERANDS,
42         ERR_BAD_OPERAND,
43         ERR_BAD_OPERATION_NAME,
44         ERR_BAD_NONEXISTING_OPERATION,
45         ERR_BAD_ID_FUNCTION,
46         ERR_BAD_ID_RECORD,
47         ERR_BAD_ID_ARRAY,
48         ERR_BAD_ID_FIELD,
49         ERR_BAD_FUNCTION_NAME,
50         ERR_BAD_RECORD_NAME,
51         ERR_BAD_ARRAY_NAME,
52         ERR_BAD_DEFINITION_METADATA,
53         ERR_BAD_DEFINITION_FUNCTION,
54         ERR_BAD_DEFINITION_RECORD,
55         ERR_BAD_METADATA_BOUND,
56         ERR_BAD_METADATA_UNKNOWN_ATTRIBUTE,
57         ERR_BAD_METADATA_INVALID_VALUE,
58         ERR_BAD_METADATA_MISSING_ATTRIBUTE,
59         ERR_BAD_METADATA_MISSING_VALUE,
60         ERR_BAD_METADATA_UNEXPECTED_ATTRIBUTE,
61         ERR_BAD_METADATA_UNEXPECTED_VALUE,
62         ERR_BAD_METADATA_MULTIPLE_ATTRIBUTE,
63         ERR_BAD_FUNCTION_PARAMETERS,
64         ERR_BAD_FUNCTION_RETURN_VALUE,
65         ERR_FUNCTION_ARGUMENT_MISMATCH,
66         ERR_BAD_FIELD_MISSING_NAME,
67         ERR_BAD_FIELD_VALUE_TYPE,
68         ERR_BAD_FIELD_METADATA,
69         ERR_BAD_ARRAY_TYPE,
70         ERR_BAD_ARRAY_SIZE,
71         ERR_BAD_ARRAY_SIZE_VALUE,
72         ERR_BAD_ARRAY_ELEMENT_MISSING_VALUE,
73         ERR_BAD_ARRAY_ELEMENT_VALUE_TYPE,
74         ERR_BAD_ARRAY_ELEMENT_VALUE,
75         ERR_BAD_ARRAY_ELEMENT_VALUE_INTEGER,
76         ERR_BAD_ARRAY_ELEMENT_VALUE_FLOAT,
77         ERR_BAD_ARRAY_ELEMENT_VALUE_STRING,
78         ERR_BAD_CHARACTER,
79         ERR_BAD_KEYWORD,
80         ERR_BAD_DEFINITION,
81         ERR_BAD_BOUND,
82         ERR_BAD_END,
83         ERR_BAD_CLOSE,
84         ERR_BAD_ARGS_BOUND,
85         ERR_BAD_TYPE,
86         ERR_BAD_PARAM_NAME,
87         ERR_BAD_NOEXP_DELIM,
88         ERR_BAD_STRING_INVALID_HEX_ESCAPE_SEQUENCE,
89         ERR_BAD_STRING_UNKNOWN_ESCAPE_SEQUENCE,
90         ERR_BAD_ARRAY_TYPE_BOUND,
91         ERR_UNDEFINED_TYPE,
92         ERR_MULTIPLE_DIRECTIVES,
93         ERR_INCORRECT_DIRECTIVE_LOCATION,
94         ERR_BAD_DIRECTIVE_DECLARATION,
95         ERR_UNKNOWN_LANGUAGE,
96         ERR_BAD_MNEMONIC_NAME,
97         ERR_REPEATING_FIELD_NAME,
98         ERR_FUNCTION_MULTIPLE_ALTERNATIVES,
99         ERR_BAD_SIGNATURE,
100         ERR_BAD_SIGNATURE_PARAMETERS,
101 
102         // Warnings
103         WAR_UNEXPECTED_RETURN_TYPE,
104         WAR_UNEXPECTED_TYPE_ID,
105     };
106 
107     ErrorClass type;
108     std::string wholeLine;
109     size_t pos; /* positions to highlight the word */
110     size_t end;
111     ErrorType err;
112     std::string message;
113     std::string verbose;
114     size_t lineNumber;
115 
ErrorError116     inline Error() : Error("No messages", 0, ErrorType::ERR_NONE, "", 0, 0, "") {}
117 
118     // CC-OFFNXT(G.FUN.01-CPP) solid logic
119     inline Error(std::string s, size_t line, ErrorType errorType, std::string overinfo, size_t p, size_t e,
120                  std::string buff, ErrorClass classType = ErrorClass::ERROR)
typeError121         : type(classType),
122           wholeLine(std::move(buff)),
123           pos(p),
124           end(e),
125           err(errorType),
126           message(std::move(s)),
127           verbose(std::move(overinfo)),
128           lineNumber(line)
129     {
130     }
131 };
132 // NOLINTEND(misc-non-private-member-variables-in-classes)
133 
134 using ErrorList = std::vector<Error>;
135 }  // namespace ark::pandasm
136 
137 #endif  // PANDA_ASSEMBLER_ERROR_H
138