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