GCC Code Coverage Report


Directory: ../
File: src/exception/SemanticError.h
Date: 2025-02-05 01:09:36
Exec Total Coverage
Lines: 0 0 -%
Functions: 0 0 -%
Branches: 0 0 -%

Line Branch Exec Source
1 // Copyright (c) 2021-2025 ChilliBits. All rights reserved.
2
3 #pragma once
4
5 #include <exception>
6 #include <string>
7
8 #include <Token.h>
9
10 namespace spice::compiler {
11
12 // Forward declarations
13 class ASTNode;
14 class SourceFile;
15 struct CodeLoc;
16
17 enum SemanticErrorType : uint8_t {
18 REFERENCED_UNDEFINED_FUNCTION,
19 REFERENCED_UNDEFINED_VARIABLE,
20 REFERENCED_UNDEFINED_STRUCT,
21 REFERENCED_UNDEFINED_INTERFACE,
22 REFERENCED_UNDEFINED_FIELD,
23 USED_BEFORE_DECLARED,
24 FUNCTION_AMBIGUITY,
25 STRUCT_AMBIGUITY,
26 INTERFACE_AMBIGUITY,
27 DUPLICATE_SYMBOL,
28 VARIABLE_DECLARED_TWICE,
29 GLOBAL_DECLARED_TWICE,
30 FUNCTION_DECLARED_TWICE,
31 PROCEDURE_DECLARED_TWICE,
32 GENERIC_TYPE_DECLARED_TWICE,
33 STRUCT_WITH_ILLEGAL_NAME,
34 STRUCT_INFINITE_SIZE,
35 STRUCT_DECLARED_TWICE,
36 MISSING_NO_ARGS_CTOR,
37 COPY_CTOR_REQUIRED,
38 INTERFACE_DECLARED_TWICE,
39 INTERFACE_METHOD_NOT_IMPLEMENTED,
40 ENUM_DECLARED_TWICE,
41 INVALID_SYMBOL_ACCESS,
42 DUPLICATE_ENUM_ITEM_NAME,
43 DUPLICATE_ENUM_ITEM_VALUE,
44 GLOBAL_OF_TYPE_DYN,
45 GLOBAL_OF_INVALID_TYPE,
46 GLOBAL_CONST_WITHOUT_VALUE,
47 MISSING_RETURN_STMT,
48 INVALID_PARAM_ORDER,
49 LAMBDA_WITH_OPTIONAL_PARAMS,
50 REFERENCED_OVERLOADED_FCT,
51 DTOR_MUST_BE_PROCEDURE,
52 DTOR_WITH_PARAMS,
53 OPERATOR_WRONG_DATA_TYPE,
54 INVALID_ITERATOR,
55 UNEXPECTED_DYN_TYPE,
56 REASSIGN_CONST_VARIABLE,
57 CONDITION_MUST_BE_BOOL,
58 SWITCH_EXPR_MUST_BE_PRIMITIVE,
59 SWITCH_CASE_TYPE_MISMATCH,
60 MISSING_MAIN_FUNCTION,
61 FCT_PARAM_IS_TYPE_DYN,
62 INVALID_BREAK_NUMBER,
63 INVALID_CONTINUE_NUMBER,
64 FALLTHROUGH_NOT_ALLOWED,
65 CASE_CONSTANT_INVALID_TYPE,
66 PRINTF_TYPE_ERROR,
67 PRINTF_ARG_COUNT_ERROR,
68 DUPLICATE_IMPORT_NAME,
69 IMPORTED_FILE_NOT_EXISTING,
70 CIRCULAR_DEPENDENCY,
71 ACCESS_TO_NON_EXISTING_MEMBER,
72 INVALID_MEMBER_ACCESS,
73 SCOPE_ACCESS_ONLY_IMPORTS,
74 UNKNOWN_DATATYPE,
75 UNKNOWN_ATTR,
76 INVALID_ATTR_TARGET,
77 MISSING_ATTR_VALUE,
78 NUMBER_OF_FIELDS_NOT_MATCHING,
79 FIELD_TYPE_NOT_MATCHING,
80 ARRAY_SIZE_INVALID,
81 FOREACH_IDX_NOT_LONG,
82 ARRAY_INDEX_NOT_INT_OR_LONG,
83 ARRAY_ITEM_TYPE_NOT_MATCHING,
84 EXPECTED_ARRAY_TYPE,
85 EXPECTED_ERROR_TYPE,
86 INVALID_SYSCALL_NUMBER_TYPE,
87 SYSCALL_NUMBER_OUT_OF_RANGE,
88 TOO_MANY_SYSCALL_ARGS,
89 RETURN_WITHOUT_VALUE_RESULT,
90 RETURN_WITH_VALUE_IN_PROCEDURE,
91 RETURN_OF_TEMPORARY_VALUE,
92 INVALID_STRUCT_INSTANTIATION,
93 DYN_POINTERS_NOT_ALLOWED,
94 REF_POINTERS_ARE_NOT_ALLOWED,
95 DYN_REFERENCES_NOT_ALLOWED,
96 MULTI_REF_NOT_ALLOWED,
97 DYN_ARRAYS_NOT_ALLOWED,
98 REFERENCE_WITHOUT_INITIALIZER,
99 TEMP_TO_NON_CONST_REF,
100 GENERIC_TYPE_NOT_IN_TEMPLATE,
101 QUALIFIER_AT_ILLEGAL_CONTEXT,
102 INSUFFICIENT_VISIBILITY,
103 JOIN_ARG_MUST_BE_TID,
104 EXPECTED_GENERIC_TYPE,
105 EXPECTED_NON_GENERIC_TYPE,
106 EXPECTED_STRUCT_TYPE,
107 EXPECTED_INTERFACE_TYPE,
108 ALIAS_WITH_TEMPLATE_LIST,
109 INTERFACE_WITH_TEMPLATE_LIST,
110 INVALID_TEMPLATE_TYPES,
111 EXPECTED_VALUE,
112 EXPECTED_TYPE,
113 UNSAFE_OPERATION_IN_SAFE_CONTEXT,
114 ASSERTION_CONDITION_BOOL,
115 ARRAY_INDEX_OUT_OF_BOUNDS,
116 EXPECTED_CONST_VARIABLE,
117 DIVISION_BY_ZERO,
118 TEST_FUNCTION_WITH_PARAMS,
119 TEST_FUNCTION_WRONG_RETURN_TYPE,
120 COMING_SOON_SA
121 };
122
123 /**
124 * Custom exception for errors, occurring in the semantic analysis phase
125 */
126 class SemanticError final : public std::exception {
127 public:
128 // Constructors
129 SemanticError(const ASTNode *node, const SemanticErrorType &type, const std::string &message, bool printErrorMessage = true);
130
131 // Public methods
132 [[nodiscard]] const char *what() const noexcept override;
133 [[nodiscard]] static std::string getMessagePrefix(SemanticErrorType errorType);
134
135 // Public members
136 std::string errorMessage;
137 };
138
139 } // namespace spice::compiler
140