Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright (c) 2021-2024 ChilliBits. All rights reserved. | ||
2 | |||
3 | #include "ParserError.h" | ||
4 | |||
5 | #include <util/CodeLoc.h> | ||
6 | |||
7 | namespace spice::compiler { | ||
8 | |||
9 | /** | ||
10 | * Constructor: Used in case that the exact code position where the error occurred is known | ||
11 | * | ||
12 | * @param codeLoc Code location where the error occurred | ||
13 | * @param type Type of the error | ||
14 | * @param message Error message suffix | ||
15 | */ | ||
16 | 7 | ParserError::ParserError(const CodeLoc &codeLoc, const ParserErrorType &type, const std::string &message) { | |
17 |
7/14✓ Branch 1 taken 7 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 7 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 7 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 7 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 7 times.
✗ Branch 20 not taken.
|
7 | errorMessage = "[Error|Parser] " + codeLoc.toPrettyString() + ": " + getMessagePrefix(type) + ": " + message; |
18 | 7 | } | |
19 | |||
20 | /** | ||
21 | * Get the message for this particular error instance | ||
22 | * | ||
23 | * @return Error message in form of a char array | ||
24 | */ | ||
25 | 7 | const char *ParserError::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 | 7 | std::string ParserError::getMessagePrefix(ParserErrorType errorType) { | |
34 |
6/7✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
7 | switch (errorType) { |
35 | 2 | case PARSING_FAILED: | |
36 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | return "Parsing failed"; |
37 | 1 | case NUMBER_OUT_OF_RANGE: | |
38 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Number is out of range"; |
39 | 1 | case INVALID_SPECIFIER_COMBINATION: | |
40 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Invalid specifier combination"; |
41 | 1 | case INVALID_CHAR_LITERAL: | |
42 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Invalid char literal"; |
43 | 1 | case INVALID_ATTR_VALUE_TYPE: | |
44 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Invalid attribute value type"; |
45 | 1 | case RESERVED_KEYWORD: | |
46 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Usage of reserved keyword"; |
47 | } | ||
48 | − | return "Unknown error"; // GCOV_EXCL_LINE | |
49 | } | ||
50 | |||
51 | } // namespace spice::compiler | ||
52 |