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