GCC Code Coverage Report


Directory: ../
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 72.8% 166 / 1 / 229
Functions: 100.0% 3 / 0 / 3
Branches: 47.9% 167 / 0 / 349

src/exception/SemanticError.cpp
Line Branch Exec Source
1 // Copyright (c) 2021-2026 ChilliBits. All rights reserved.
2
3 #include "SemanticError.h"
4
5 #include <ast/ASTNodes.h>
6 #include <util/CodeLoc.h>
7
8 namespace spice::compiler {
9
10 250 SemanticError::SemanticError(const ASTNode *node, const SemanticErrorType &type, const std::string &msg, bool printErrorMessage) {
11
1/2
✗ Branch 4 → 5 not taken.
✓ Branch 4 → 6 taken 250 times.
250 assert(node != nullptr);
12
3/6
✓ Branch 6 → 7 taken 250 times.
✗ Branch 6 → 32 not taken.
✓ Branch 7 → 8 taken 250 times.
✗ Branch 7 → 30 not taken.
✓ Branch 8 → 9 taken 250 times.
✗ Branch 8 → 28 not taken.
250 errorMessage = "[Error|Semantic] " + node->codeLoc.toPrettyString() + ":\n";
13
4/8
✓ Branch 13 → 14 taken 250 times.
✗ Branch 13 → 41 not taken.
✓ Branch 14 → 15 taken 250 times.
✗ Branch 14 → 39 not taken.
✓ Branch 15 → 16 taken 250 times.
✗ Branch 15 → 37 not taken.
✓ Branch 16 → 17 taken 250 times.
✗ Branch 16 → 35 not taken.
250 errorMessage += getMessagePrefix(type) + ": " + msg;
14
2/2
✓ Branch 20 → 21 taken 248 times.
✓ Branch 20 → 27 taken 2 times.
250 if (printErrorMessage) {
15
1/2
✓ Branch 21 → 22 taken 248 times.
✗ Branch 21 → 49 not taken.
248 const std::string nodeErrorMessage = node->getErrorMessage();
16
2/4
✓ Branch 22 → 23 taken 248 times.
✗ Branch 22 → 46 not taken.
✓ Branch 23 → 24 taken 248 times.
✗ Branch 23 → 44 not taken.
248 errorMessage += "\n\n" + nodeErrorMessage;
17 248 }
18 250 }
19
20 /**
21 * Get the message for this particular error instance
22 *
23 * @return Error message in form of a char array
24 */
25 250 const char *SemanticError::what() const noexcept { return errorMessage.c_str(); }
26
27 /**
28 * Get the prefix of the error message for a particular error
29 *
30 * @param errorType Type of the error
31 * @return Prefix string for the error type
32 */
33 250 std::string SemanticError::getMessagePrefix(SemanticErrorType errorType) {
34
77/109
✓ Branch 2 → 3 taken 15 times.
✓ Branch 2 → 8 taken 6 times.
✓ Branch 2 → 13 taken 3 times.
✗ Branch 2 → 18 not taken.
✗ Branch 2 → 23 not taken.
✓ Branch 2 → 28 taken 2 times.
✓ Branch 2 → 33 taken 1 time.
✗ Branch 2 → 38 not taken.
✗ Branch 2 → 43 not taken.
✓ Branch 2 → 48 taken 7 times.
✓ Branch 2 → 53 taken 3 times.
✓ Branch 2 → 58 taken 1 time.
✓ Branch 2 → 63 taken 2 times.
✓ Branch 2 → 68 taken 1 time.
✗ Branch 2 → 73 not taken.
✗ Branch 2 → 78 not taken.
✗ Branch 2 → 83 not taken.
✗ Branch 2 → 88 not taken.
✓ Branch 2 → 93 taken 7 times.
✗ Branch 2 → 98 not taken.
✗ Branch 2 → 103 not taken.
✓ Branch 2 → 108 taken 6 times.
✗ Branch 2 → 113 not taken.
✗ Branch 2 → 118 not taken.
✗ Branch 2 → 123 not taken.
✓ Branch 2 → 128 taken 1 time.
✓ Branch 2 → 133 taken 1 time.
✗ Branch 2 → 138 not taken.
✓ Branch 2 → 143 taken 1 time.
✓ Branch 2 → 148 taken 2 times.
✓ Branch 2 → 153 taken 6 times.
✓ Branch 2 → 158 taken 1 time.
✓ Branch 2 → 163 taken 2 times.
✓ Branch 2 → 168 taken 1 time.
✓ Branch 2 → 173 taken 1 time.
✓ Branch 2 → 178 taken 29 times.
✓ Branch 2 → 183 taken 2 times.
✓ Branch 2 → 188 taken 9 times.
✓ Branch 2 → 193 taken 14 times.
✓ Branch 2 → 198 taken 5 times.
✓ Branch 2 → 203 taken 1 time.
✓ Branch 2 → 208 taken 2 times.
✓ Branch 2 → 213 taken 2 times.
✓ Branch 2 → 218 taken 3 times.
✓ Branch 2 → 223 taken 2 times.
✓ Branch 2 → 228 taken 2 times.
✓ Branch 2 → 233 taken 2 times.
✓ Branch 2 → 238 taken 2 times.
✓ Branch 2 → 243 taken 7 times.
✓ Branch 2 → 248 taken 2 times.
✓ Branch 2 → 253 taken 2 times.
✓ Branch 2 → 258 taken 2 times.
✓ Branch 2 → 263 taken 1 time.
✓ Branch 2 → 268 taken 1 time.
✓ Branch 2 → 273 taken 2 times.
✗ Branch 2 → 278 not taken.
✓ Branch 2 → 283 taken 4 times.
✓ Branch 2 → 288 taken 1 time.
✓ Branch 2 → 293 taken 1 time.
✗ Branch 2 → 298 not taken.
✓ Branch 2 → 303 taken 1 time.
✓ Branch 2 → 308 taken 1 time.
✓ Branch 2 → 313 taken 1 time.
✓ Branch 2 → 318 taken 2 times.
✓ Branch 2 → 323 taken 1 time.
✓ Branch 2 → 328 taken 1 time.
✓ Branch 2 → 333 taken 1 time.
✓ Branch 2 → 338 taken 1 time.
✓ Branch 2 → 343 taken 1 time.
✓ Branch 2 → 348 taken 1 time.
✗ Branch 2 → 353 not taken.
✗ Branch 2 → 358 not taken.
✓ Branch 2 → 363 taken 9 times.
✓ Branch 2 → 368 taken 9 times.
✓ Branch 2 → 373 taken 7 times.
✓ Branch 2 → 378 taken 8 times.
✓ Branch 2 → 383 taken 2 times.
✓ Branch 2 → 388 taken 2 times.
✓ Branch 2 → 393 taken 1 time.
✓ Branch 2 → 398 taken 1 time.
✓ Branch 2 → 403 taken 2 times.
✗ Branch 2 → 408 not taken.
✗ Branch 2 → 413 not taken.
✗ Branch 2 → 418 not taken.
✓ Branch 2 → 423 taken 1 time.
✓ Branch 2 → 428 taken 1 time.
✓ Branch 2 → 433 taken 2 times.
✓ Branch 2 → 438 taken 8 times.
✓ Branch 2 → 443 taken 2 times.
✓ Branch 2 → 448 taken 5 times.
✗ Branch 2 → 453 not taken.
✓ Branch 2 → 458 taken 3 times.
✗ Branch 2 → 463 not taken.
✗ Branch 2 → 468 not taken.
✗ Branch 2 → 473 not taken.
✓ Branch 2 → 478 taken 2 times.
✗ Branch 2 → 483 not taken.
✗ Branch 2 → 488 not taken.
✗ Branch 2 → 493 not taken.
✗ Branch 2 → 498 not taken.
✗ Branch 2 → 503 not taken.
✓ Branch 2 → 508 taken 1 time.
✓ Branch 2 → 513 taken 1 time.
✓ Branch 2 → 518 taken 1 time.
✓ Branch 2 → 523 taken 1 time.
✗ Branch 2 → 528 not taken.
✓ Branch 2 → 533 taken 1 time.
✓ Branch 2 → 538 taken 1 time.
✗ Branch 2 → 543 not taken.
250 switch (errorType) {
35 15 case REFERENCED_UNDEFINED_FUNCTION:
36
1/2
✓ Branch 5 → 6 taken 15 times.
✗ Branch 5 → 545 not taken.
30 return "Referenced undefined function";
37 6 case REFERENCED_UNDEFINED_VARIABLE:
38
1/2
✓ Branch 10 → 11 taken 6 times.
✗ Branch 10 → 548 not taken.
12 return "Referenced undefined variable";
39 3 case REFERENCED_UNDEFINED_STRUCT:
40
1/2
✓ Branch 15 → 16 taken 3 times.
✗ Branch 15 → 551 not taken.
6 return "Referenced undefined struct";
41 case REFERENCED_UNDEFINED_INTERFACE:
42 return "Referenced undefined interface";
43 case REFERENCED_UNDEFINED_FIELD:
44 return "Referenced undefined struct field";
45 2 case USED_BEFORE_DECLARED:
46
1/2
✓ Branch 30 → 31 taken 2 times.
✗ Branch 30 → 560 not taken.
4 return "Used before declared";
47 1 case FUNCTION_AMBIGUITY:
48
1/2
✓ Branch 35 → 36 taken 1 time.
✗ Branch 35 → 563 not taken.
2 return "Function ambiguity";
49 case STRUCT_AMBIGUITY:
50 return "Struct ambiguity";
51 case INTERFACE_AMBIGUITY:
52 return "Interface ambiguity";
53 7 case DUPLICATE_SYMBOL:
54
1/2
✓ Branch 50 → 51 taken 7 times.
✗ Branch 50 → 572 not taken.
14 return "Duplicate symbol";
55 3 case VARIABLE_DECLARED_TWICE:
56
1/2
✓ Branch 55 → 56 taken 3 times.
✗ Branch 55 → 575 not taken.
6 return "Multiple declarations of the same variable";
57 1 case GLOBAL_DECLARED_TWICE:
58
1/2
✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 578 not taken.
2 return "Multiple declarations of the same global variable";
59 2 case FUNCTION_DECLARED_TWICE:
60
1/2
✓ Branch 65 → 66 taken 2 times.
✗ Branch 65 → 581 not taken.
4 return "Multiple declarations of a function";
61 1 case PROCEDURE_DECLARED_TWICE:
62
1/2
✓ Branch 70 → 71 taken 1 time.
✗ Branch 70 → 584 not taken.
2 return "Multiple declarations of a procedure";
63 case GENERIC_TYPE_DECLARED_TWICE:
64 return "Multiple declarations of a generic type with the same name";
65 case STRUCT_WITH_ILLEGAL_NAME:
66 return "Struct name illegal";
67 case STRUCT_INFINITE_SIZE:
68 return "Struct with infinite size";
69 case STRUCT_DECLARED_TWICE:
70 return "Multiple declarations of a struct with the same name";
71 7 case NO_MATCHING_CTOR_FOUND:
72
1/2
✓ Branch 95 → 96 taken 7 times.
✗ Branch 95 → 599 not taken.
14 return "No matching ctor found";
73 case COPY_CTOR_REQUIRED:
74 return "Missing mandatory copy ctor";
75 case INTERFACE_DECLARED_TWICE:
76 return "Multiple declarations of an interface with the same name";
77 6 case INTERFACE_METHOD_NOT_IMPLEMENTED:
78
1/2
✓ Branch 110 → 111 taken 6 times.
✗ Branch 110 → 608 not taken.
12 return "Interface method not implemented";
79 case ENUM_DECLARED_TWICE:
80 return "Multiple declarations of an enum with the same name";
81 case INVALID_SYMBOL_ACCESS:
82 return "Invalid symbol access";
83 case DUPLICATE_ENUM_ITEM_NAME:
84 return "Duplicate enum item name";
85 1 case DUPLICATE_ENUM_ITEM_VALUE:
86
1/2
✓ Branch 130 → 131 taken 1 time.
✗ Branch 130 → 620 not taken.
2 return "Duplicate enum item value";
87 1 case GLOBAL_OF_TYPE_DYN:
88
1/2
✓ Branch 135 → 136 taken 1 time.
✗ Branch 135 → 623 not taken.
2 return "Global of type dyn";
89 case GLOBAL_OF_INVALID_TYPE:
90 return "Global of invalid type";
91 1 case GLOBAL_CONST_WITHOUT_VALUE:
92
1/2
✓ Branch 145 → 146 taken 1 time.
✗ Branch 145 → 629 not taken.
2 return "Global const without value";
93 2 case MISSING_RETURN_STMT:
94
1/2
✓ Branch 150 → 151 taken 2 times.
✗ Branch 150 → 632 not taken.
4 return "Missing return statement";
95 6 case INVALID_PARAM_ORDER:
96
1/2
✓ Branch 155 → 156 taken 6 times.
✗ Branch 155 → 635 not taken.
12 return "Invalid argument order";
97 1 case LAMBDA_WITH_OPTIONAL_PARAMS:
98
1/2
✓ Branch 160 → 161 taken 1 time.
✗ Branch 160 → 638 not taken.
2 return "Lambda with optional parameters";
99 2 case REFERENCED_OVERLOADED_FCT:
100
1/2
✓ Branch 165 → 166 taken 2 times.
✗ Branch 165 → 641 not taken.
4 return "Referenced overloaded function";
101 1 case DTOR_MUST_BE_PROCEDURE:
102
1/2
✓ Branch 170 → 171 taken 1 time.
✗ Branch 170 → 644 not taken.
2 return "Destructor must be a procedure";
103 1 case DTOR_WITH_PARAMS:
104
1/2
✓ Branch 175 → 176 taken 1 time.
✗ Branch 175 → 647 not taken.
2 return "Destructors must not have parameters";
105 29 case OPERATOR_WRONG_DATA_TYPE:
106
1/2
✓ Branch 180 → 181 taken 29 times.
✗ Branch 180 → 650 not taken.
58 return "Wrong data type for operator";
107 2 case INVALID_ITERATOR:
108
1/2
✓ Branch 185 → 186 taken 2 times.
✗ Branch 185 → 653 not taken.
4 return "Invalid iterator";
109 9 case UNEXPECTED_DYN_TYPE:
110
1/2
✓ Branch 190 → 191 taken 9 times.
✗ Branch 190 → 656 not taken.
18 return "Unexpected dyn type";
111 14 case REASSIGN_CONST_VARIABLE:
112
1/2
✓ Branch 195 → 196 taken 14 times.
✗ Branch 195 → 659 not taken.
28 return "Cannot re-assign constant variable";
113 5 case CONDITION_MUST_BE_BOOL:
114
1/2
✓ Branch 200 → 201 taken 5 times.
✗ Branch 200 → 662 not taken.
10 return "Condition must be bool";
115 1 case SWITCH_EXPR_MUST_BE_PRIMITIVE:
116
1/2
✓ Branch 205 → 206 taken 1 time.
✗ Branch 205 → 665 not taken.
2 return "Switch expression of wrong type";
117 2 case SWITCH_CASE_TYPE_MISMATCH:
118
1/2
✓ Branch 210 → 211 taken 2 times.
✗ Branch 210 → 668 not taken.
4 return "Case constant type does not match switch expression type";
119 2 case MISSING_MAIN_FUNCTION:
120
1/2
✓ Branch 215 → 216 taken 2 times.
✗ Branch 215 → 671 not taken.
4 return "Spice executables must contain a main function";
121 3 case FCT_PARAM_IS_TYPE_DYN:
122
1/2
✓ Branch 220 → 221 taken 3 times.
✗ Branch 220 → 674 not taken.
6 return "Parameter type dyn not valid in function/procedure definition without default value";
123 2 case INVALID_BREAK_NUMBER:
124
1/2
✓ Branch 225 → 226 taken 2 times.
✗ Branch 225 → 677 not taken.
4 return "Invalid number of break calls";
125 2 case INVALID_CONTINUE_NUMBER:
126
1/2
✓ Branch 230 → 231 taken 2 times.
✗ Branch 230 → 680 not taken.
4 return "Invalid number of continue calls";
127 2 case FALLTHROUGH_NOT_ALLOWED:
128
1/2
✓ Branch 235 → 236 taken 2 times.
✗ Branch 235 → 683 not taken.
4 return "Fallthrough statement not allowed here";
129 2 case CASE_CONSTANT_INVALID_TYPE:
130
1/2
✓ Branch 240 → 241 taken 2 times.
✗ Branch 240 → 686 not taken.
4 return "Case constant of invalid type";
131 7 case PRINTF_TYPE_ERROR:
132
1/2
✓ Branch 245 → 246 taken 7 times.
✗ Branch 245 → 689 not taken.
14 return "Types of printf call not matching";
133 2 case PRINTF_ARG_COUNT_ERROR:
134
1/2
✓ Branch 250 → 251 taken 2 times.
✗ Branch 250 → 692 not taken.
4 return "Printf arg number not matching template string";
135 2 case DUPLICATE_IMPORT_NAME:
136
1/2
✓ Branch 255 → 256 taken 2 times.
✗ Branch 255 → 695 not taken.
4 return "Duplicate import name";
137 2 case IMPORTED_FILE_NOT_EXISTING:
138
1/2
✓ Branch 260 → 261 taken 2 times.
✗ Branch 260 → 698 not taken.
4 return "Imported source file not existing";
139 1 case CIRCULAR_DEPENDENCY:
140
1/2
✓ Branch 265 → 266 taken 1 time.
✗ Branch 265 → 701 not taken.
2 return "Circular import detected";
141 1 case ACCESS_TO_NON_EXISTING_MEMBER:
142
1/2
✓ Branch 270 → 271 taken 1 time.
✗ Branch 270 → 704 not taken.
2 return "Access to non-existing member";
143 2 case INVALID_MEMBER_ACCESS:
144
1/2
✓ Branch 275 → 276 taken 2 times.
✗ Branch 275 → 707 not taken.
4 return "Member access is only allowed on structs and Strings";
145 case SCOPE_ACCESS_ONLY_IMPORTS:
146 return "Scope access is only allowed on imports";
147 4 case UNKNOWN_DATATYPE:
148
1/2
✓ Branch 285 → 286 taken 4 times.
✗ Branch 285 → 713 not taken.
8 return "Unknown datatype";
149 1 case UNKNOWN_ATTR:
150
1/2
✓ Branch 290 → 291 taken 1 time.
✗ Branch 290 → 716 not taken.
2 return "Unknown attribute";
151 1 case INVALID_ATTR_TARGET:
152
1/2
✓ Branch 295 → 296 taken 1 time.
✗ Branch 295 → 719 not taken.
2 return "Invalid attribute target";
153 case INVALID_ATTR_VALUE:
154 return "Invalid attribute value";
155 1 case MISSING_ATTR_VALUE:
156
1/2
✓ Branch 305 → 306 taken 1 time.
✗ Branch 305 → 725 not taken.
2 return "Missing attribute value";
157 1 case NUMBER_OF_FIELDS_NOT_MATCHING:
158
1/2
✓ Branch 310 → 311 taken 1 time.
✗ Branch 310 → 728 not taken.
2 return "Number of struct fields not matching declaration";
159 1 case FIELD_TYPE_NOT_MATCHING:
160
1/2
✓ Branch 315 → 316 taken 1 time.
✗ Branch 315 → 731 not taken.
2 return "The type of a field value does not match the declaration";
161 2 case ARRAY_SIZE_INVALID:
162
1/2
✓ Branch 320 → 321 taken 2 times.
✗ Branch 320 → 734 not taken.
4 return "Array size invalid";
163 1 case FOREACH_IDX_NOT_LONG:
164
1/2
✓ Branch 325 → 326 taken 1 time.
✗ Branch 325 → 737 not taken.
2 return "Foreach index not of type long";
165 1 case ARRAY_INDEX_NOT_INT_OR_LONG:
166
1/2
✓ Branch 330 → 331 taken 1 time.
✗ Branch 330 → 740 not taken.
2 return "Array index not of type int or long";
167 1 case ARRAY_ITEM_TYPE_NOT_MATCHING:
168
1/2
✓ Branch 335 → 336 taken 1 time.
✗ Branch 335 → 743 not taken.
2 return "Array item type not matching";
169 1 case EXPECTED_ARRAY_TYPE:
170
1/2
✓ Branch 340 → 341 taken 1 time.
✗ Branch 340 → 746 not taken.
2 return "Expected array type";
171 1 case EXPECTED_ERROR_TYPE:
172
1/2
✓ Branch 345 → 346 taken 1 time.
✗ Branch 345 → 749 not taken.
2 return "Expected error type";
173 1 case INVALID_SYSCALL_NUMBER_TYPE:
174
1/2
✓ Branch 350 → 351 taken 1 time.
✗ Branch 350 → 752 not taken.
2 return "Invalid syscall number type";
175 case SYSCALL_NUMBER_OUT_OF_RANGE:
176 return "Syscall number out of range";
177 case TOO_MANY_SYSCALL_ARGS:
178 return "Too many syscall args";
179 9 case BUILTIN_TEMPLATE_TYPE_COUNT_MISMATCH:
180
1/2
✓ Branch 365 → 366 taken 9 times.
✗ Branch 365 → 761 not taken.
18 return "Builtin function template type count mismatch";
181 9 case BUILTIN_ARG_COUNT_MISMATCH:
182
1/2
✓ Branch 370 → 371 taken 9 times.
✗ Branch 370 → 764 not taken.
18 return "Builtin function argument count mismatch";
183 7 case BUILTIN_SIGNATURE_MISMATCH:
184
1/2
✓ Branch 375 → 376 taken 7 times.
✗ Branch 375 → 767 not taken.
14 return "Builtin function signature mismatch";
185 8 case BUILTIN_ARG_TYPE_MISMATCH:
186
1/2
✓ Branch 380 → 381 taken 8 times.
✗ Branch 380 → 770 not taken.
16 return "Builtin function argument type mismatch";
187 2 case RETURN_WITHOUT_VALUE_RESULT:
188
1/2
✓ Branch 385 → 386 taken 2 times.
✗ Branch 385 → 773 not taken.
4 return "Return without initialization of result variable";
189 2 case RETURN_WITH_VALUE_IN_PROCEDURE:
190
1/2
✓ Branch 390 → 391 taken 2 times.
✗ Branch 390 → 776 not taken.
4 return "Return with value in procedure";
191 1 case RETURN_OF_TEMPORARY_VALUE:
192
1/2
✓ Branch 395 → 396 taken 1 time.
✗ Branch 395 → 779 not taken.
2 return "Return of temporary value";
193 1 case INVALID_STRUCT_INSTANTIATION:
194
1/2
✓ Branch 400 → 401 taken 1 time.
✗ Branch 400 → 782 not taken.
2 return "Invalid struct instantiation";
195 2 case DYN_POINTERS_NOT_ALLOWED:
196
1/2
✓ Branch 405 → 406 taken 2 times.
✗ Branch 405 → 785 not taken.
4 return "Dyn pointers not allowed";
197 case REF_POINTERS_ARE_NOT_ALLOWED:
198 return "Ref pointers not allowed";
199 case DYN_REFERENCES_NOT_ALLOWED:
200 return "Dyn references not allowed";
201 case MULTI_REF_NOT_ALLOWED:
202 return "Multi references not allowed";
203 1 case DYN_ARRAYS_NOT_ALLOWED:
204
1/2
✓ Branch 425 → 426 taken 1 time.
✗ Branch 425 → 797 not taken.
2 return "Dyn arrays not allowed";
205 1 case REFERENCE_WITHOUT_INITIALIZER:
206
1/2
✓ Branch 430 → 431 taken 1 time.
✗ Branch 430 → 800 not taken.
2 return "Reference without initializer";
207 2 case TEMP_TO_NON_CONST_REF:
208
1/2
✓ Branch 435 → 436 taken 2 times.
✗ Branch 435 → 803 not taken.
4 return "Temporary bound to non-const reference";
209 8 case GENERIC_TYPE_NOT_IN_TEMPLATE:
210
1/2
✓ Branch 440 → 441 taken 8 times.
✗ Branch 440 → 806 not taken.
16 return "Generic type not contained in template";
211 2 case QUALIFIER_AT_ILLEGAL_CONTEXT:
212
1/2
✓ Branch 445 → 446 taken 2 times.
✗ Branch 445 → 809 not taken.
4 return "Qualifier at illegal context";
213 5 case INSUFFICIENT_VISIBILITY:
214
1/2
✓ Branch 450 → 451 taken 5 times.
✗ Branch 450 → 812 not taken.
10 return "Insufficient symbol visibility";
215 case JOIN_ARG_MUST_BE_TID:
216 return "Argument of join builtin must be a tid";
217 3 case EXPECTED_GENERIC_TYPE:
218
1/2
✓ Branch 460 → 461 taken 3 times.
✗ Branch 460 → 818 not taken.
6 return "Expected a generic type";
219 case EXPECTED_NON_GENERIC_TYPE:
220 return "Expected a non-generic type";
221 case EXPECTED_STRUCT_TYPE:
222 return "Expected a struct type";
223 case EXPECTED_INTERFACE_TYPE:
224 return "Expected an interface type";
225 2 case EXPECTED_COMPILE_TIME_VALUE:
226
1/2
✓ Branch 480 → 481 taken 2 times.
✗ Branch 480 → 830 not taken.
4 return "Expected compile time value";
227 case ALIAS_WITH_TEMPLATE_LIST:
228 return "Alias with template list";
229 case INTERFACE_WITH_TEMPLATE_LIST:
230 return "Interface reference with template list";
231 case INVALID_TEMPLATE_TYPES:
232 return "Invalid template types";
233 case EXPECTED_VALUE:
234 return "Expected value";
235 case EXPECTED_TYPE:
236 return "Expected type";
237 1 case UNSAFE_OPERATION_IN_SAFE_CONTEXT:
238
1/2
✓ Branch 510 → 511 taken 1 time.
✗ Branch 510 → 848 not taken.
2 return "Unsafe operation in safe context";
239 1 case ASSERTION_CONDITION_BOOL:
240
1/2
✓ Branch 515 → 516 taken 1 time.
✗ Branch 515 → 851 not taken.
2 return "Assertion condition must be bool";
241 1 case ARRAY_INDEX_OUT_OF_BOUNDS:
242
1/2
✓ Branch 520 → 521 taken 1 time.
✗ Branch 520 → 854 not taken.
2 return "Array index out of bounds";
243 1 case EXPECTED_CONST_VARIABLE:
244
1/2
✓ Branch 525 → 526 taken 1 time.
✗ Branch 525 → 857 not taken.
2 return "Expected const variable";
245 case DIVISION_BY_ZERO:
246 return "Division by zero";
247 1 case TEST_FUNCTION_WITH_PARAMS:
248
1/2
✓ Branch 535 → 536 taken 1 time.
✗ Branch 535 → 863 not taken.
2 return "Test function with parameters";
249 1 case TEST_FUNCTION_WRONG_RETURN_TYPE:
250
1/2
✓ Branch 540 → 541 taken 1 time.
✗ Branch 540 → 866 not taken.
2 return "Test function with wrong return type";
251 }
252 assert_fail("Unknown error"); // GCOV_EXCL_LINE
253 return "Unknown error"; // GCOV_EXCL_LINE
254 }
255
256 } // namespace spice::compiler
257