• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 panda::pandasm {
22 
23 struct Error {
24     enum class ErrorClass { WARNING = 0, ERROR };
25     enum class ErrorType {
26         ERR_NONE = 0,
27 
28         // Lexer
29         ERR_STRING_MISSING_TERMINATING_CHARACTER,
30 
31         // Parser
32         ERR_BAD_LABEL,
33         ERR_BAD_LABEL_EXT,
34         ERR_BAD_NAME_ID,
35         ERR_BAD_NAME_REG,
36         ERR_BAD_INTEGER_NAME,
37         ERR_BAD_INTEGER_WIDTH,
38         ERR_BAD_FLOAT_NAME,
39         ERR_BAD_FLOAT_WIDTH,
40         ERR_BAD_NUMBER_OPERANDS,
41         ERR_BAD_OPERAND,
42         ERR_BAD_OPERATION_NAME,
43         ERR_BAD_NONEXISTING_OPERATION,
44         ERR_BAD_ID_FUNCTION,
45         ERR_BAD_ID_RECORD,
46         ERR_BAD_ID_FIELD,
47         ERR_BAD_FUNCTION_NAME,
48         ERR_BAD_RECORD_NAME,
49         ERR_BAD_DEFINITION_METADATA,
50         ERR_BAD_DEFINITION_FUNCTION,
51         ERR_BAD_DEFINITION_RECORD,
52         ERR_BAD_METADATA_BOUND,
53         ERR_BAD_METADATA_UNKNOWN_ATTRIBUTE,
54         ERR_BAD_METADATA_INVALID_VALUE,
55         ERR_BAD_METADATA_MISSING_ATTRIBUTE,
56         ERR_BAD_METADATA_MISSING_VALUE,
57         ERR_BAD_METADATA_UNEXPECTED_ATTRIBUTE,
58         ERR_BAD_METADATA_UNEXPECTED_VALUE,
59         ERR_BAD_METADATA_MULTIPLE_ATTRIBUTE,
60         ERR_BAD_FUNCTION_PARAMETERS,
61         ERR_BAD_FUNCTION_RETURN_VALUE,
62         ERR_FUNCTION_ARGUMENT_MISMATCH,
63         ERR_BAD_FIELD_MISSING_NAME,
64         ERR_BAD_FIELD_VALUE_TYPE,
65         ERR_BAD_CHARACTER,
66         ERR_BAD_KEYWORD,
67         ERR_BAD_DEFINITION,
68         ERR_BAD_BOUND,
69         ERR_BAD_END,
70         ERR_BAD_CLOSE,
71         ERR_BAD_ARGS_BOUND,
72         ERR_BAD_TYPE,
73         ERR_BAD_PARAM_NAME,
74         ERR_BAD_NOEXP_DELIM,
75         ERR_BAD_STRING_INVALID_HEX_ESCAPE_SEQUENCE,
76         ERR_BAD_STRING_UNKNOWN_ESCAPE_SEQUENCE,
77         ERR_BAD_ARRAY_TYPE_BOUND,
78         ERR_UNDEFINED_TYPE,
79         ERR_MULTIPLE_DIRECTIVES,
80         ERR_INCORRECT_DIRECTIVE_LOCATION,
81         ERR_BAD_DIRECTIVE_DECLARATION,
82         ERR_UNKNOWN_LANGUAGE,
83         ERR_BAD_MNEMONIC_NAME,
84         ERR_REPEATING_FIELD_NAME,
85 
86         // Warnings
87         WAR_UNEXPECTED_RETURN_TYPE,
88         WAR_UNEXPECTED_TYPE_ID,
89     };
90 
91     ErrorClass type;
92     std::string whole_line;
93     size_t pos;  // position to highlight the word
94     size_t end;
95     ErrorType err;
96     std::string message;
97     std::string verbose;
98     size_t line_number;
99 
ErrorError100     inline Error() : Error("No messages", 0, ErrorType::ERR_NONE, "", 0, 0, "") {}
101 
102     inline Error(std::string s, size_t line, ErrorType error_type, std::string overinfo, size_t p, size_t e,
103                  std::string buff, ErrorClass class_type = ErrorClass::ERROR)
typeError104         : type(class_type),
105           whole_line(std::move(buff)),
106           pos(p),
107           end(e),
108           err(error_type),
109           message(std::move(s)),
110           verbose(std::move(overinfo)),
111           line_number(line)
112     {
113     }
114 };
115 
116 using ErrorList = std::vector<Error>;
117 }  // namespace panda::pandasm
118 
119 #endif  // PANDA_ASSEMBLER_ERROR_H_
120